Putting It All Back Together

Throughout all the data analysis we’ve done, the datasets have become more fragmented - lexical recall, gist, and eye tracking datasets. I want to put them all together in one whole dataset again so we can perform some analyses more efficiently (particularly correlations). The only thing I need to remember is we’ll have a new column called eye_exclude and if it is set to TRUE it means we can’t include that row in any analysis relating to eye gaze (usually because that trial was less than 25% looking).

Group Changes and Participant Tables

We have some changes to make to the groups. First, fix Josh as learning ASL when he was 6. Next, drop the DeafNative Group and reclassify all who learned ASL < 3.9 as DeafEarly and ASL => 4.0 as DeafLate.

# Change Josh's AoASL to 6
fulldata <- fulldata %>%
  mutate(aoasl = as.double(aoasl)) %>%
  mutate(aoasl = case_when(
    participant == "Josh" ~ 6,
    TRUE ~ aoasl
  ))

# Reclassify Groups
fulldata <- fulldata %>%
  mutate(maingroup = case_when(
    hearing == "Deaf" & aoasl < 4 ~ "DeafEarly",
    hearing == "Deaf" & aoasl >= 4 ~ "DeafLate",
    maingroup == "HearingLateASL" ~ "HearingLate",
    maingroup == "HearingNoviceASL" ~ "HearingNovice"
  ))

# Create Participant Demographics Table
participant_info <- fulldata %>%
  select(-(acc:gist)) %>%
  select(-(video:direction)) %>%
  distinct() %>% 
  group_by(maingroup) %>%
  summarise(n = n(),
            age_mean = mean(age),
            age_sd = sd(age),
            age_max = max(age),
            age_min = min(age),
            aoasl_mean = mean(aoasl),
            aoasl_sd = sd(aoasl),
            aoasl_max = max(aoasl),
            aoasl_min = min(aoasl),
            signyrs_mean = mean(signyrs),
            signyrs_sd = sd(signyrs),
            signyrs_max = max(signyrs),
            signyrs_min = min(signyrs),
            selfrate_mean = mean(selfrate),
            selfrate_sd = sd(selfrate),
            selfrate_max = max(selfrate),
            selfrate_min = min(selfrate)) %>%
  ungroup() %>%
  mutate_if(is.double, funs(round(., 2))) %>%
  mutate(age = paste(age_mean, "±", age_sd, sep = " "),
         aoasl = paste(aoasl_mean, "±", aoasl_sd, sep = " "),
         signyrs = paste(signyrs_mean, "±", signyrs_sd, sep = " "),
         selfrate = paste(selfrate_mean, "±", selfrate_sd, sep = " "),
         age_range = paste(age_min, age_max, sep = "-"),
         aoasl_range = paste(aoasl_min, aoasl_max, sep = "-"),
         signyrs_range = paste(signyrs_min, signyrs_max, sep = "-"),
         selfrate_range = paste(selfrate_min, selfrate_max, sep = "-")) %>%
  select(-(age_mean:selfrate_sd)) %>%
  select(-c(selfrate_max, selfrate_min))
funs() is soft deprecated as of dplyr 0.8.0
Please use a list of either functions or lambdas: 

  # Simple named list: 
  list(mean = mean, median = median)

  # Auto named with `tibble::lst()`: 
  tibble::lst(mean, median)

  # Using lambdas
  list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
This warning is displayed once per session.
[1] 0.007421356
[1] 0.02793204

Participant ANOVAs

Below are the ANOVA outputs for participant demographics, and LSDs for each.

Participants’ age

            Df Sum Sq Mean Sq F value   Pr(>F)    
maingroup    3   1810   603.3   14.29 8.75e-07 ***
Residuals   48   2026    42.2                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Participants’ AoASL

            Df Sum Sq Mean Sq F value Pr(>F)    
maingroup    3 2553.9   851.3   89.98 <2e-16 ***
Residuals   48  454.1     9.5                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Participants’ Sign Yrs

            Df Sum Sq Mean Sq F value   Pr(>F)    
maingroup    3   7032  2344.1   59.37 3.52e-16 ***
Residuals   48   1895    39.5                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Participants’ Self-Rating

            Df Sum Sq Mean Sq F value Pr(>F)    
maingroup    3  30.71  10.237   72.37 <2e-16 ***
Residuals   48   6.79   0.141                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Gist & Lexical Recall Data

Tables & Charts

Let’s generate a table for lexical recall and gist for forward vs. reversed stories.

And then bar charts too after that with error bars.

And let’s calculate the average reduction in score due to reversal first is lex recall, then gist.

[1] "lex mean 0.141570192307692"
[1] "lex sd 0.102655144785552"
[1] "gist mean 0.451923076923077"
[1] "gist sd 0.39925930667527"

ANOVA Plan

Next, we’re going to do ANOVAs. We’ll always do it in this order.

  1. ANOVA with factors MainGroup & Direction
  2. ANOVA with factor MainGroup, for Forward only
  3. ANOVA with factor MainGroup, for Reverse only

(I also ran ANCOVAs before but now have taken them out…they are below: (4) ANCOVA with factor Direction, and covariate AoASL and Age, (5) Regression with variables AoASL and Age, for Forward only, (6) Regression with variables AoASL and Age, for Reverse only.)

I did not include Age as a covariate in the first 3 ANOVAs because they did not add to or change the model in any significant way.

Gist ANOVAs

  1. ANOVA with factors MainGroup & Direction.
Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Forward only. In the code is a Kruskal-Wallis test. And Chi-Sq too.
Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
  1. ANOVA with factor MainGroup, for Reverse only. In the code is a Kruskal-Wallis test. And Chi-Sq too.
Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA

Lexical Recall ANOVAs

  1. ANOVA with factors MainGroup & Direction.
Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Forward only.
Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Reverse only.
Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA

AoA Correlations

Next, we want to look at correlations between AoA and Gist, and betwen AoA and Lexical Recall. Rain asked for forward and reversed separately (1) deaf only, (2) hearing only, and (3) both. Let’s make it work.

# Let's make participant-level data, and have forward/reversed in separate columns
lexgist_data <- fulldata %>%
  group_by(maingroup, participant, direction) %>%
  mutate(gist = mean(gist, na.rm = TRUE),
         lex = mean(acc, na.rm = TRUE)) %>%
  ungroup() %>%
  select(maingroup, participant, hearing, direction, aoasl, signyrs, age, gist, lex) %>%
  distinct() %>%
  gather(metric, value, gist:lex) %>%
  unite(metricvalue, c(metric, direction), sep = "_") %>%
  spread(metricvalue, value) %>%
  select(-participant, -maingroup)

lexgist_deaf <- lexgist_data %>% filter(hearing == "Deaf") %>% select(-hearing)
lexgist_hearing <- lexgist_data %>% filter(hearing == "Hearing") %>% select(-hearing)
lexgist_all <- lexgist_data %>% select(-hearing)

# Load awesome function to make correlation tables with stars for significance
# From: https://myowelt.blogspot.co.uk/2008/04/beautiful-correlation-tables-in-r.html
corstarsl <- function(x){ 
require(Hmisc) 
x <- as.matrix(x) 
R <- Hmisc::rcorr(x)$r 
p <- Hmisc::rcorr(x)$P 
## define notions for significance levels; spacing is important.
mystars <- ifelse(p < .001, "***", ifelse(p < .01, "** ", ifelse(p < .05, "* ", " ")))
## trunctuate the matrix that holds the correlations to two decimal
R <- format(round(cbind(rep(-1.11, ncol(x)), R), 2))[,-1] 
## build a new matrix that includes the correlations with their apropriate stars 
Rnew <- matrix(paste(R, mystars, sep=""), ncol=ncol(x)) 
diag(Rnew) <- paste(diag(R), " ", sep="") 
rownames(Rnew) <- colnames(x) 
colnames(Rnew) <- paste(colnames(x), "", sep="") 
## remove upper triangle
Rnew <- as.matrix(Rnew)
Rnew[upper.tri(Rnew, diag = TRUE)] <- ""
Rnew <- as.data.frame(Rnew) 
## remove last column and return the matrix (which is now a data frame)
Rnew <- cbind(Rnew[1:length(Rnew)-1])
return(Rnew) 
}

# Correlations for Deaf
print("DEAF Correlations - Pearson's r")
[1] "DEAF Correlations - Pearson's r"
                    aoasl     signyrs        age gist_forward
aoasl          1.00000000 -0.50188271  0.2569266   0.08266372
signyrs       -0.50188271  1.00000000  0.7005996   0.18321126
age            0.25692658  0.70059957  1.0000000   0.27454460
gist_forward   0.08266372  0.18321126  0.2745446   1.00000000
gist_reversed -0.25585944 -0.01264108 -0.1726494   0.01762268
lex_forward    0.14743344  0.27968506  0.4299784  -0.08155558
lex_reversed  -0.25601869  0.06666991 -0.1276564  -0.09770669
              gist_reversed lex_forward lex_reversed
aoasl           -0.25585944  0.14743344  -0.25601869
signyrs         -0.01264108  0.27968506   0.06666991
age             -0.17264941  0.42997836  -0.12765639
gist_forward     0.01762268 -0.08155558  -0.09770669
gist_reversed    1.00000000  0.02667228   0.36021802
lex_forward      0.02667228  1.00000000   0.35984896
lex_reversed     0.36021802  0.35984896   1.00000000
[1] "DEAF Correlations - P-values"
                    aoasl      signyrs          age
aoasl                  NA 5.536859e-03 1.784812e-01
signyrs       0.005536859           NA 2.316794e-05
age           0.178481235 2.316794e-05           NA
gist_forward  0.669883870 3.414473e-01 1.495001e-01
gist_reversed 0.180354887 9.481084e-01 3.704662e-01
lex_forward   0.445335355 1.417223e-01 1.990878e-02
lex_reversed  0.180074401 7.311333e-01 5.093053e-01
              gist_forward gist_reversed lex_forward
aoasl            0.6698839    0.18035489  0.44533535
signyrs          0.3414473    0.94810844  0.14172234
age              0.1495001    0.37046624  0.01990878
gist_forward            NA    0.92770439  0.67406670
gist_reversed    0.9277044            NA  0.89076150
lex_forward      0.6740667    0.89076150          NA
lex_reversed     0.6140989    0.05492031  0.05518763
              lex_reversed
aoasl           0.18007440
signyrs         0.73113326
age             0.50930528
gist_forward    0.61409886
gist_reversed   0.05492031
lex_forward     0.05518763
lex_reversed            NA
[1] "HEARING Correlations - Pearson's r"
                    aoasl     signyrs       age gist_forward
aoasl          1.00000000 -0.07887014 0.3468185  -0.15525565
signyrs       -0.07887014  1.00000000 0.9021947   0.57814668
age            0.34681845  0.90219467 1.0000000   0.44651471
gist_forward  -0.15525565  0.57814668 0.4465147   1.00000000
gist_reversed  0.07815752  0.28845747 0.3096345   0.29502173
lex_forward    0.02500270  0.36725659 0.3093175   0.57154568
lex_reversed   0.01411304  0.20828810 0.2013959   0.07645805
              gist_reversed lex_forward lex_reversed
aoasl            0.07815752   0.0250027   0.01411304
signyrs          0.28845747   0.3672566   0.20828810
age              0.30963454   0.3093175   0.20139593
gist_forward     0.29502173   0.5715457   0.07645805
gist_reversed    1.00000000   0.3568237   0.57951177
lex_forward      0.35682373   1.0000000   0.36558335
lex_reversed     0.57951177   0.3655834   1.00000000
[1] "HEARING Correlations - P-values"
                  aoasl      signyrs          age gist_forward
aoasl                NA 7.205586e-01 1.049514e-01  0.479339901
signyrs       0.7205586           NA 4.046902e-09  0.003857506
age           0.1049514 4.046902e-09           NA  0.032691678
gist_forward  0.4793399 3.857506e-03 3.269168e-02           NA
gist_reversed 0.7229865 1.819325e-01 1.505025e-01  0.171744872
lex_forward   0.9098410 8.472342e-02 1.509426e-01  0.004385473
lex_reversed  0.9490401 3.402228e-01 3.567949e-01  0.728786944
              gist_reversed lex_forward lex_reversed
aoasl           0.722986491 0.909840966  0.949040146
signyrs         0.181932485 0.084723421  0.340222821
age             0.150502497 0.150942614  0.356794883
gist_forward    0.171744872 0.004385473  0.728786944
gist_reversed            NA 0.094647564  0.003755274
lex_forward     0.094647564          NA  0.086260173
lex_reversed    0.003755274 0.086260173           NA
[1] "ALL Correlations - Pearson's r"
                    aoasl    signyrs        age gist_forward
aoasl          1.00000000 -0.7852245 -0.3136458   -0.3230903
signyrs       -0.78522450  1.0000000  0.8314757    0.4956183
age           -0.31364575  0.8314757  1.0000000    0.4602616
gist_forward  -0.32309031  0.4956183  0.4602616    1.0000000
gist_reversed -0.39228034  0.3356193  0.1930257    0.2712760
lex_forward   -0.08115845  0.2969899  0.3631829    0.4927911
lex_reversed  -0.33945210  0.3182316  0.1886432    0.1521110
              gist_reversed lex_forward lex_reversed
aoasl            -0.3922803 -0.08115845   -0.3394521
signyrs           0.3356193  0.29698990    0.3182316
age               0.1930257  0.36318285    0.1886432
gist_forward      0.2712760  0.49279109    0.1521110
gist_reversed     1.0000000  0.21701817    0.4921550
lex_forward       0.2170182  1.00000000    0.3800771
lex_reversed      0.4921550  0.38007714    1.0000000
[1] "ALL Correlations - P-values"
                     aoasl      signyrs          age
aoasl                   NA 5.523138e-12 2.356068e-02
signyrs       5.523138e-12           NA 2.309264e-14
age           2.356068e-02 2.309264e-14           NA
gist_forward  1.947866e-02 1.870210e-04 5.965582e-04
gist_reversed 4.023967e-03 1.500068e-02 1.703671e-01
lex_forward   5.673490e-01 3.251161e-02 8.137387e-03
lex_reversed  1.382017e-02 2.149677e-02 1.804672e-01
              gist_forward gist_reversed  lex_forward
aoasl         0.0194786591  0.0040239674 0.5673489974
signyrs       0.0001870210  0.0150006763 0.0325116095
age           0.0005965582  0.1703671283 0.0081373865
gist_forward            NA  0.0517394727 0.0002061625
gist_reversed 0.0517394727            NA 0.1222543184
lex_forward   0.0002061625  0.1222543184           NA
lex_reversed  0.2817023589  0.0002107074 0.0054478292
              lex_reversed
aoasl         0.0138201739
signyrs       0.0214967652
age           0.1804672425
gist_forward  0.2817023589
gist_reversed 0.0002107074
lex_forward   0.0054478292
lex_reversed            NA

I’m also including nicely formatted tables with *** indicators of significance for quick referencing. Order: Deaf, Hearing, All.

Loading required package: Hmisc
Loading required package: lattice
Loading required package: survival
Loading required package: Formula

Attaching package: ‘Hmisc’

The following objects are masked from ‘package:dplyr’:

    src, summarize

The following objects are masked from ‘package:base’:

    format.pval, units

Scatterplot of Correlations

Let’s visualize what’s happening with the correlations here.

Eye Gaze Data

Now eye gaze data. Boxplots first. Also here, we’re renaming “chin” to “neck” because that’s what it actually is! But we also have to fix all NA’s in the percentages to zeros, becuase that’s what they actually are.

But let’s try error charts too! Instead of boxplots.

And a table of eye gaze results too

Big Three-Way ANOVA

Now we’re going to try a three-way Group x Direction x AOI ANOVA with the top 3 AOIs (Eyes, Mouth, Neck)

$ANOVA
                   Effect DFn DFd          F            p
2               maingroup   3  47  3.0877532 3.602912e-02
3               direction   1  47 14.6917045 3.751848e-04
5                     aoi   2  94 38.9261560 4.838451e-13
4     maingroup:direction   3  47  0.8509636 4.731139e-01
6           maingroup:aoi   6  94  1.1224334 3.553342e-01
7           direction:aoi   2  94  7.0028846 1.462185e-03
8 maingroup:direction:aoi   6  94  0.6318533 7.044042e-01
  p<.05          ges
2     * 0.0019613548
3     * 0.0008045246
5     * 0.4115853001
4       0.0001398905
6       0.0570561521
7     * 0.0208462714
8       0.0057298396

Left Vs Right

$ANOVA
         Effect DFn DFd         F          p p<.05        ges
2     maingroup   3  47 2.5418616 0.06755936       0.09343220
3           aoi   1  47 1.8880127 0.17594392       0.01444195
4 maingroup:aoi   3  47 0.8434728 0.47700559       0.01926124

Interactions Visualization

So we have significant maingroup:aoi and direction:aoi interactions. Let’s try to visualize what can be driving these. We can go back to the SEM chart but break it down…

First are the maingroup:aoi charts The error bars are not 100% accurate, I took a quick-n-easy way around

First are the direction:aoi charts The error bars are not 100% accurate, I took a quick-n-easy way around

All the AOI means

Let’s get tables of our means here, in various configurations

Eyes

  1. ANOVA with factors MainGroup & Direction.
Converting "id" to factor for ANOVA.Converting "direction" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Forward only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Reverse only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA

Mouth

  1. ANOVA with factors MainGroup & Direction.
Converting "id" to factor for ANOVA.Converting "direction" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Forward only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Reverse only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA

Neck

  1. ANOVA with factors MainGroup & Direction.
Converting "id" to factor for ANOVA.Converting "direction" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Forward only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Reverse only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA

FaceChest

We originally defined FaceChest such that

  1. Face = eyes + mouth + chin
  2. Chest = upperchest + midchest + lowerchest

BUT. Chin is actually neck. It’s not even part of the face if you think about it. So I’m redefining FaceChest as:

  1. Face = forehead + eyes + mouth
  2. Chest = neck + upperchest + midchest + lowerchest

So let’s do this. Then see what’s happening across groups for FaceChest.

Cool. Next we’ll do error bar charts using the new FaceChest across groups.

Now let’s do the ANOVAs. Also skipping LSDs here.

  1. ANOVA with factors MainGroup & Direction.
Grouping rowwise data frame strips rowwise natureConverting "id" to factor for ANOVA.Converting "direction" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Forward only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA
  1. ANOVA with factor MainGroup, for Reverse only.
Converting "id" to factor for ANOVA.Converting "maingroup" to factor for ANOVA.Data is unbalanced (unequal N per group). Make sure you specified a well-considered value for the type argument to ezANOVA().Coefficient covariances computed by hccm()
$ANOVA
NA

Eye Gaze & Performance Correlations

Next we’re going to correlate our eye gaze metrics (Eye, Mouth, Neck, and FaceChest) with lexical recall and gist. Okay! But remember we have a slightly smaller dataset here because we’ve excluded some participants for having bad eye data (but they had valid behavioral data so we kept them in the AoA-Performance correlations above).

IMPORTANT: We also removed gist_forward column.

Grouping rowwise data frame strips rowwise nature

Deaf Correlations, Forward

[1] "DEAF Correlations - Pearson's r"
NaNs produced
                       aoasl     signyrs selfrate lex_forward
aoasl              1.0000000 -0.50188271      NaN   0.1172403
signyrs           -0.5018827  1.00000000      NaN   0.3851766
selfrate                 NaN         NaN        1         NaN
lex_forward        0.1172403  0.38517662      NaN   1.0000000
eyes_forward       0.0648630  0.08415829     -Inf   0.1956027
mouth_forward      0.1773316  0.09383576      NaN   0.1127365
neck_forward      -0.2393697 -0.13346320       NA  -0.2818220
facechest_forward  0.2500143  0.15009922      NaN   0.2796232
                  eyes_forward mouth_forward neck_forward
aoasl               0.06486300    0.17733161   -0.2393697
signyrs             0.08415829    0.09383576   -0.1334632
selfrate                  -Inf           NaN           NA
lex_forward         0.19560271    0.11273652   -0.2818220
eyes_forward        1.00000000   -0.40389579   -0.4021353
mouth_forward      -0.40389579    1.00000000   -0.6652489
neck_forward       -0.40213532   -0.66524894    1.0000000
facechest_forward   0.37868728    0.69180555   -0.9914181
                  facechest_forward
aoasl                     0.2500143
signyrs                   0.1500992
selfrate                        NaN
lex_forward               0.2796232
eyes_forward              0.3786873
mouth_forward             0.6918055
neck_forward             -0.9914181
facechest_forward         1.0000000
[1] "DEAF Correlations - P-values"
NaNs produced
                        aoasl     signyrs selfrate lex_forward
aoasl                      NA 0.005536859      NaN  0.54472642
signyrs           0.005536859          NA      NaN  0.03907661
selfrate                  NaN         NaN       NA         NaN
lex_forward       0.544726419 0.039076613      NaN          NA
eyes_forward      0.738164098 0.664257652      NaN  0.30920842
mouth_forward     0.357428124 0.628269497      NaN  0.56039077
neck_forward      0.211072773 0.490065695       NA  0.13857693
facechest_forward 0.190862019 0.437057253      NaN  0.14181412
                  eyes_forward mouth_forward neck_forward
aoasl               0.73816410  3.574281e-01 2.110728e-01
signyrs             0.66425765  6.282695e-01 4.900657e-01
selfrate                   NaN           NaN           NA
lex_forward         0.30920842  5.603908e-01 1.385769e-01
eyes_forward                NA  2.978758e-02 3.057654e-02
mouth_forward       0.02978758            NA 8.235939e-05
neck_forward        0.03057654  8.235939e-05           NA
facechest_forward   0.04279115  3.228724e-05 0.000000e+00
                  facechest_forward
aoasl                  1.908620e-01
signyrs                4.370573e-01
selfrate                        NaN
lex_forward            1.418141e-01
eyes_forward           4.279115e-02
mouth_forward          3.228724e-05
neck_forward           0.000000e+00
facechest_forward                NA
NaNs producedNaNs produced

Deaf Correlations, Reversed

[1] "DEAF Correlations - Pearson's r"
NaNs produced
                         aoasl      signyrs selfrate
aoasl               1.00000000 -0.501882714      NaN
signyrs            -0.50188271  1.000000000      NaN
selfrate                   NaN          NaN        1
gist_reversed      -0.22660857 -0.106652058      NaN
lex_reversed       -0.16780060 -0.025210812     -Inf
eyes_reversed       0.02247978  0.095836598     -Inf
mouth_reversed      0.30344566  0.007193105       NA
neck_reversed      -0.32970389 -0.052028484      NaN
facechest_reversed  0.30789805  0.086108174      NaN
                   gist_reversed lex_reversed eyes_reversed
aoasl                -0.22660857  -0.16780060    0.02247978
signyrs              -0.10665206  -0.02521081    0.09583660
selfrate                     NaN         -Inf          -Inf
gist_reversed         1.00000000   0.30316904    0.02254099
lex_reversed          0.30316904   1.00000000   -0.07989084
eyes_reversed         0.02254099  -0.07989084    1.00000000
mouth_reversed        0.06590947   0.11828487   -0.45147688
neck_reversed        -0.07553298  -0.01236973   -0.42235608
facechest_reversed    0.08644925   0.03749679    0.43328831
                   mouth_reversed neck_reversed
aoasl                 0.303445656   -0.32970389
signyrs               0.007193105   -0.05202848
selfrate                       NA           NaN
gist_reversed         0.065909471   -0.07553298
lex_reversed          0.118284868   -0.01236973
eyes_reversed        -0.451476879   -0.42235608
mouth_reversed        1.000000000   -0.59771759
neck_reversed        -0.597717586    1.00000000
facechest_reversed    0.598425615   -0.99196123
                   facechest_reversed
aoasl                      0.30789805
signyrs                    0.08610817
selfrate                          NaN
gist_reversed              0.08644925
lex_reversed               0.03749679
eyes_reversed              0.43328831
mouth_reversed             0.59842561
neck_reversed             -0.99196123
facechest_reversed         1.00000000
[1] "DEAF Correlations - P-values"
NaNs produced
                         aoasl     signyrs selfrate
aoasl                       NA 0.005536859      NaN
signyrs            0.005536859          NA      NaN
selfrate                   NaN         NaN       NA
gist_reversed      0.246214837 0.589083651      NaN
lex_reversed       0.393376109 0.898670598      NaN
eyes_reversed      0.909600388 0.627592554      NaN
mouth_reversed     0.116473238 0.971021336       NA
neck_reversed      0.086644303 0.792600789      NaN
facechest_reversed 0.110944277 0.663069853      NaN
                   gist_reversed lex_reversed eyes_reversed
aoasl                  0.2462148    0.3933761    0.90960039
signyrs                0.5890837    0.8986706    0.62759255
selfrate                     NaN          NaN           NaN
gist_reversed                 NA    0.1168233    0.90935522
lex_reversed           0.1168233           NA    0.68612755
eyes_reversed          0.9093552    0.6861276            NA
mouth_reversed         0.7389667    0.5488535    0.01588231
neck_reversed          0.7024561    0.9501866    0.02515937
facechest_reversed     0.6618134    0.8497523    0.02126289
                   mouth_reversed neck_reversed
aoasl                0.1164732376  0.0866443030
signyrs              0.9710213364  0.7926007893
selfrate                       NA           NaN
gist_reversed        0.7389667101  0.7024561485
lex_reversed         0.5488534905  0.9501865707
eyes_reversed        0.0158823144  0.0251593655
mouth_reversed                 NA  0.0007826591
neck_reversed        0.0007826591            NA
facechest_reversed   0.0007685907  0.0000000000
                   facechest_reversed
aoasl                    0.1109442772
signyrs                  0.6630698529
selfrate                          NaN
gist_reversed            0.6618133668
lex_reversed             0.8497522839
eyes_reversed            0.0212628885
mouth_reversed           0.0007685907
neck_reversed            0.0000000000
facechest_reversed                 NA
NaNs producedNaNs produced

Hearing Correlations, Forward

[1] "HEARING Correlations - Pearson's r"
                        aoasl     signyrs     selfrate
aoasl              1.00000000 -0.07887014  0.013855614
signyrs           -0.07887014  1.00000000  0.738478512
selfrate           0.01385561  0.73847851  1.000000000
lex_forward        0.08908095  0.26130640  0.470768307
eyes_forward      -0.31135717  0.13249823  0.003272703
mouth_forward      0.17806747  0.06609089 -0.036311096
neck_forward       0.38414940 -0.24596133  0.135873662
facechest_forward -0.28903425  0.30186427 -0.017766369
                  lex_forward eyes_forward mouth_forward
aoasl              0.08908095 -0.311357174    0.17806747
signyrs            0.26130640  0.132498229    0.06609089
selfrate           0.47076831  0.003272703   -0.03631110
lex_forward        1.00000000 -0.206412381    0.04471778
eyes_forward      -0.20641238  1.000000000   -0.75736409
mouth_forward      0.04471778 -0.757364090    1.00000000
neck_forward       0.36551587 -0.547841416   -0.08094060
facechest_forward -0.28030958  0.532841135    0.14471392
                  neck_forward facechest_forward
aoasl                0.3841494       -0.28903425
signyrs             -0.2459613        0.30186427
selfrate             0.1358737       -0.01776637
lex_forward          0.3655159       -0.28030958
eyes_forward        -0.5478414        0.53284113
mouth_forward       -0.0809406        0.14471392
neck_forward         1.0000000       -0.94241622
facechest_forward   -0.9424162        1.00000000
[1] "HEARING Correlations - P-values"
                       aoasl      signyrs     selfrate
aoasl                     NA 0.7205586083 0.9499685271
signyrs           0.72055861           NA 0.0000573213
selfrate          0.94996853 0.0000573213           NA
lex_forward       0.68606710 0.2284506503 0.0233767693
eyes_forward      0.14812668 0.5467283190 0.9881757567
mouth_forward     0.41628385 0.7644726750 0.8693498612
neck_forward      0.07033577 0.2579308336 0.5364660663
facechest_forward 0.18102107 0.1615536596 0.9358722215
                  lex_forward eyes_forward mouth_forward
aoasl              0.68606710 1.481267e-01  4.162839e-01
signyrs            0.22845065 5.467283e-01  7.644727e-01
selfrate           0.02337677 9.881758e-01  8.693499e-01
lex_forward                NA 3.446870e-01  8.394476e-01
eyes_forward       0.34468695           NA  2.859607e-05
mouth_forward      0.83944756 2.859607e-05            NA
neck_forward       0.08632259 6.807339e-03  7.135194e-01
facechest_forward  0.19514550 8.849714e-03  5.100229e-01
                  neck_forward facechest_forward
aoasl             7.033577e-02      1.810211e-01
signyrs           2.579308e-01      1.615537e-01
selfrate          5.364661e-01      9.358722e-01
lex_forward       8.632259e-02      1.951455e-01
eyes_forward      6.807339e-03      8.849714e-03
mouth_forward     7.135194e-01      5.100229e-01
neck_forward                NA      1.861311e-11
facechest_forward 1.861311e-11                NA

Hearing Correlations, Reversed

[1] "HEARING Correlations - Pearson's r"
                         aoasl     signyrs    selfrate
aoasl               1.00000000 -0.07887014  0.01385561
signyrs            -0.07887014  1.00000000  0.73847851
selfrate            0.01385561  0.73847851  1.00000000
gist_reversed       0.07815752  0.28845747  0.52144079
lex_reversed        0.06994866  0.22209268  0.36876982
eyes_reversed      -0.23457415  0.30698405  0.19250555
mouth_reversed      0.06256448  0.04730903 -0.11038394
neck_reversed       0.29446186 -0.38249551 -0.08287913
facechest_reversed -0.20474471  0.43157928  0.15951977
                   gist_reversed lex_reversed eyes_reversed
aoasl                0.078157516   0.06994866  -0.234574150
signyrs              0.288457469   0.22209268   0.306984046
selfrate             0.521440792   0.36876982   0.192505548
gist_reversed        1.000000000   0.61989299  -0.003896107
lex_reversed         0.619892993   1.00000000  -0.128554235
eyes_reversed       -0.003896107  -0.12855424   1.000000000
mouth_reversed      -0.057827989   0.01769965  -0.608459497
neck_reversed        0.223993634   0.24863579  -0.667670003
facechest_reversed  -0.163039205  -0.19097043   0.602644558
                   mouth_reversed neck_reversed
aoasl                  0.06256448    0.29446186
signyrs                0.04730903   -0.38249551
selfrate              -0.11038394   -0.08287913
gist_reversed         -0.05782799    0.22399363
lex_reversed           0.01769965    0.24863579
eyes_reversed         -0.60845950   -0.66767000
mouth_reversed         1.00000000   -0.09060995
neck_reversed         -0.09060995    1.00000000
facechest_reversed     0.23728789   -0.93513523
                   facechest_reversed
aoasl                      -0.2047447
signyrs                     0.4315793
selfrate                    0.1595198
gist_reversed              -0.1630392
lex_reversed               -0.1909704
eyes_reversed               0.6026446
mouth_reversed              0.2372879
neck_reversed              -0.9351352
facechest_reversed          1.0000000
[1] "HEARING Correlations - P-values"
                       aoasl      signyrs     selfrate
aoasl                     NA 0.7205586083 0.9499685271
signyrs            0.7205586           NA 0.0000573213
selfrate           0.9499685 0.0000573213           NA
gist_reversed      0.7229865 0.1819324846 0.0107201595
lex_reversed       0.7511350 0.3084339611 0.0833513648
eyes_reversed      0.2813177 0.1542103596 0.3788529950
mouth_reversed     0.7767217 0.8302717357 0.6160911892
neck_reversed      0.1725980 0.0716562063 0.7069492591
facechest_reversed 0.3486849 0.0397532848 0.4671998551
                   gist_reversed lex_reversed eyes_reversed
aoasl                0.722986491  0.751135019  0.2813176833
signyrs              0.181932485  0.308433961  0.1542103596
selfrate             0.010720159  0.083351365  0.3788529950
gist_reversed                 NA  0.001604979  0.9859236041
lex_reversed         0.001604979           NA  0.5588319770
eyes_reversed        0.985923604  0.558831977            NA
mouth_reversed       0.793254788  0.936112582  0.0020651929
neck_reversed        0.304204161  0.252625006  0.0004996114
facechest_reversed   0.457300302  0.382738853  0.0023393018
                   mouth_reversed neck_reversed
aoasl                 0.776721714  1.725980e-01
signyrs               0.830271736  7.165621e-02
selfrate              0.616091189  7.069493e-01
gist_reversed         0.793254788  3.042042e-01
lex_reversed          0.936112582  2.526250e-01
eyes_reversed         0.002065193  4.996114e-04
mouth_reversed                 NA  6.809520e-01
neck_reversed         0.680952034            NA
facechest_reversed    0.275627132  6.290390e-11
                   facechest_reversed
aoasl                    3.486849e-01
signyrs                  3.975328e-02
selfrate                 4.671999e-01
gist_reversed            4.573003e-01
lex_reversed             3.827389e-01
eyes_reversed            2.339302e-03
mouth_reversed           2.756271e-01
neck_reversed            6.290390e-11
facechest_reversed                 NA

All People Correlations, Forward

Grouping rowwise data frame strips rowwise nature
[1] "FW Correlations - Pearson's r"
                        aoasl     signyrs      selfrate
aoasl              1.00000000 -0.78522450 -0.5061627801
signyrs           -0.78522450  1.00000000  0.7095934161
selfrate          -0.50616278  0.70959342  1.0000000000
lex_forward       -0.14263169  0.36334718  0.4611243862
eyes_forward       0.10233497 -0.09714360 -0.1184348559
mouth_forward     -0.06004520  0.21724346  0.1191126408
neck_forward      -0.12643634 -0.03886278  0.0937957291
facechest_forward  0.06745102  0.12098148 -0.0001684626
                  lex_forward eyes_forward mouth_forward
aoasl             -0.14263169    0.1023350    -0.0600452
signyrs            0.36334718   -0.0971436     0.2172435
selfrate           0.46112439   -0.1184349     0.1191126
lex_forward        1.00000000   -0.1346806     0.1166878
eyes_forward      -0.13468058    1.0000000    -0.6230710
mouth_forward      0.11668783   -0.6230710     1.0000000
neck_forward       0.05166907   -0.4273280    -0.4048121
facechest_forward -0.03165485    0.4281833     0.4368729
                  neck_forward facechest_forward
aoasl              -0.12643634      0.0674510168
signyrs            -0.03886278      0.1209814757
selfrate            0.09379573     -0.0001684626
lex_forward         0.05166907     -0.0316548545
eyes_forward       -0.42732804      0.4281833073
mouth_forward      -0.40481211      0.4368729235
neck_forward        1.00000000     -0.9653761042
facechest_forward  -0.96537610      1.0000000000
[1] "FW Correlations - P-values"
                         aoasl      signyrs     selfrate
aoasl                       NA 5.523138e-12 1.290502e-04
signyrs           5.523138e-12           NA 3.880305e-09
selfrate          1.290502e-04 3.880305e-09           NA
lex_forward       3.131194e-01 8.106491e-03 5.807582e-04
eyes_forward      4.703512e-01 4.932766e-01 4.030234e-01
mouth_forward     6.724059e-01 1.218575e-01 4.003178e-01
neck_forward      3.717642e-01 7.844425e-01 5.083628e-01
facechest_forward 6.347056e-01 3.929129e-01 9.990543e-01
                   lex_forward eyes_forward mouth_forward
aoasl             0.3131194308 4.703512e-01  6.724059e-01
signyrs           0.0081064913 4.932766e-01  1.218575e-01
selfrate          0.0005807582 4.030234e-01  4.003178e-01
lex_forward                 NA 3.411309e-01  4.100459e-01
eyes_forward      0.3411308761           NA  8.097560e-07
mouth_forward     0.4100459246 8.097560e-07            NA
neck_forward      0.7160246926 1.579677e-03  2.913236e-03
facechest_forward 0.8237119972 1.542092e-03  1.203117e-03
                  neck_forward facechest_forward
aoasl              0.371764201       0.634705650
signyrs            0.784442484       0.392912900
selfrate           0.508362784       0.999054292
lex_forward        0.716024693       0.823711997
eyes_forward       0.001579677       0.001542092
mouth_forward      0.002913236       0.001203117
neck_forward                NA       0.000000000
facechest_forward  0.000000000                NA

All People Correlations, Reversed

[1] "RV Correlations - Pearson's r"
                          aoasl     signyrs    selfrate
aoasl               1.000000000 -0.78501877 -0.50422978
signyrs            -0.785018765  1.00000000  0.70727052
selfrate           -0.504229778  0.70727052  1.00000000
gist_reversed      -0.323263833  0.23410877  0.37615052
lex_reversed       -0.257797316  0.24984565  0.35782852
eyes_reversed       0.083660505 -0.02729735  0.01126565
mouth_reversed     -0.086016858  0.25058312  0.13689724
neck_reversed      -0.094361911 -0.11454842 -0.05930558
facechest_reversed -0.006715593  0.23324074  0.17394754
                   gist_reversed lex_reversed eyes_reversed
aoasl              -0.3232638330  -0.25779732    0.08366050
signyrs             0.2341087663   0.24984565   -0.02729735
selfrate            0.3761505176   0.35782852    0.01126565
gist_reversed       1.0000000000   0.44831458   -0.03314746
lex_reversed        0.4483145836   1.00000000   -0.14027902
eyes_reversed      -0.0331474583  -0.14027902    1.00000000
mouth_reversed      0.1034677946   0.14056188   -0.54427342
neck_reversed      -0.0002581996   0.07954129   -0.50321873
facechest_reversed  0.0425947142  -0.02840231    0.48223892
                   mouth_reversed neck_reversed
aoasl                 -0.08601686 -0.0943619107
signyrs                0.25058312 -0.1145484173
selfrate               0.13689724 -0.0593055817
gist_reversed          0.10346779 -0.0002581996
lex_reversed           0.14056188  0.0795412921
eyes_reversed         -0.54427342 -0.5032187287
mouth_reversed         1.00000000 -0.3897527180
neck_reversed         -0.38975272  1.0000000000
facechest_reversed     0.45460728 -0.9576927231
                   facechest_reversed
aoasl                    -0.006715593
signyrs                   0.233240744
selfrate                  0.173947537
gist_reversed             0.042594714
lex_reversed             -0.028402311
eyes_reversed             0.482238920
mouth_reversed            0.454607280
neck_reversed            -0.957692723
facechest_reversed        1.000000000
[1] "RV Correlations - P-values"
                          aoasl      signyrs     selfrate
aoasl                        NA 9.197088e-12 1.615663e-04
signyrs            9.197088e-12           NA 6.557450e-09
selfrate           1.615663e-04 6.557450e-09           NA
gist_reversed      2.067647e-02 9.823107e-02 6.521192e-03
lex_reversed       6.778899e-02 7.703055e-02 9.936345e-03
eyes_reversed      5.594433e-01 8.491958e-01 9.374615e-01
mouth_reversed     5.483940e-01 7.613368e-02 3.381006e-01
neck_reversed      5.101240e-01 4.234798e-01 6.793201e-01
facechest_reversed 9.626962e-01 9.952015e-02 2.221732e-01
                   gist_reversed lex_reversed eyes_reversed
aoasl               0.0206764678 0.0677889947  5.594433e-01
signyrs             0.0982310702 0.0770305455  8.491958e-01
selfrate            0.0065211919 0.0099363454  9.374615e-01
gist_reversed                 NA 0.0009694894  8.173808e-01
lex_reversed        0.0009694894           NA  3.261872e-01
eyes_reversed       0.8173808170 0.3261871603            NA
mouth_reversed      0.4699673753 0.3252028489  3.651373e-05
neck_reversed       0.9985652449 0.5790065420  1.673547e-04
facechest_reversed  0.7666339762 0.8431667739  3.391156e-04
                   mouth_reversed neck_reversed
aoasl                5.483940e-01  0.5101239880
signyrs              7.613368e-02  0.4234797598
selfrate             3.381006e-01  0.6793201353
gist_reversed        4.699674e-01  0.9985652449
lex_reversed         3.252028e-01  0.5790065420
eyes_reversed        3.651373e-05  0.0001673547
mouth_reversed                 NA  0.0046967183
neck_reversed        4.696718e-03            NA
facechest_reversed   8.043284e-04  0.0000000000
                   facechest_reversed
aoasl                    0.9626961679
signyrs                  0.0995201469
selfrate                 0.2221731688
gist_reversed            0.7666339762
lex_reversed             0.8431667739
eyes_reversed            0.0003391156
mouth_reversed           0.0008043284
neck_reversed            0.0000000000
facechest_reversed                 NA

Correlation Table

And the correlation table.

Heat Maps

And finally, we’re going to do heat maps.

eyegaze_heat <- fulldata %>%
  ungroup() %>%
  filter(eye_exclude == FALSE) %>%
  select(id:direction, belly, lowerchest, midchest, upperchest, neck, mouth, eyes, forehead) %>%
  gather(aoi, percent, belly:forehead) %>%
  group_by(maingroup, participant, direction, aoi) %>%
  summarise(percent = mean(percent, na.rm=TRUE)) %>%
  group_by(maingroup,direction,aoi) %>%
  summarise(percent = mean(percent, na.rm=TRUE)) %>%
  ungroup() %>%
  filter(!is.na(aoi)) %>%
  mutate(aoi = factor(aoi,levels=c("belly","lowerchest","midchest",
                                   "upperchest","neck","mouth","eyes","forehead"))) %>%
  ungroup() %>%
  mutate(maingroup = case_when(
    maingroup == "DeafEarly" ~ "Deaf Early",
    maingroup == "DeafLate" ~ "Deaf Late",
    maingroup == "HearingLate" ~ "Hearing Late",
    maingroup == "HearingNovice" ~ "Hearing Novice"
    )) %>%
  mutate(percent_lab = case_when(
    percent >= 0.01 ~ as.character(
                        paste0(
                          round(percent, 2) * 100, '%')),
    percent < 0.01 ~ NA_character_
  ))

eyegaze_heat_all <- fulldata %>%
  ungroup() %>%
  filter(eye_exclude == FALSE) %>%
  select(id:direction, belly, lowerchest, midchest, upperchest, neck, mouth, eyes, forehead) %>%
  gather(aoi, percent, belly:forehead) %>%
  group_by(maingroup,participant,direction,aoi) %>%
  dplyr::summarize(percent = mean(percent, na.rm=TRUE)) %>%
  group_by(maingroup,direction,aoi) %>%
  dplyr::summarize(percent = mean(percent, na.rm=TRUE)) %>%
  group_by(maingroup,aoi) %>%
  dplyr::summarize(percent = mean(percent, na.rm=TRUE)) %>%
  ungroup() %>%
  filter(!is.na(aoi)) %>%
  mutate(aoi = factor(aoi,levels=c("belly","lowerchest","midchest",
                                   "upperchest","neck","mouth","eyes","forehead"))) %>%
  ungroup() %>%
  mutate(maingroup = case_when(
    maingroup == "DeafEarly" ~ "Deaf Early",
    maingroup == "DeafLate" ~ "Deaf Late",
    maingroup == "HearingLate" ~ "Hearing Late",
    maingroup == "HearingNovice" ~ "Hearing Novice"
    ))

ggplot(eyegaze_heat, aes(x = maingroup, y = aoi)) +
  geom_tile(aes(fill=percent),color="lightgray",na.rm=TRUE) + 
#  scale_fill_viridis(option = "viridis", direction=-1, limits = c(0,.7), labels = percent, name = "looking time") +
  geom_text(aes(label = percent_lab), size = 3.5) +
    scale_fill_gradient(low = "#ffffff", high = "#1c6aba", space = "Lab", limits = c(0,.704), labels = percent, name = "looking time", na.value = "grey50") +
  theme_bw() +
  theme(axis.text.x=element_text(angle=30,hjust=1),
        strip.text.x = element_text(size = 11, color = "black", face = "italic"), 
        strip.background = element_rect(colour = "white", fill = "white"),
        panel.grid.major = element_line(color = "white")) +
  facet_grid(. ~ direction) +
  ylab("") + xlab("") + ggtitle("Eye Gaze Heat Map, by Direction") + guides(fill = F) +
  scale_y_discrete(expand=c(0,0)) +
  scale_x_discrete(expand = c(0,0))

Summary

Below are the p-values from the ANOVAs with 4 MainGroups. I never included Age as a covariate because it never improved the model. I included all ANOVAs for Gist and Lex Recall, and ANOVAs for any eye AOI or ratio was included only if either maingroup or direction was significant. Deafearly-Deaflate shows the LSD p-value for that comparison.

And below are the p-values from the ANCOVAs with Hearing & AoASL. I included all ANCOVAs for Gist and Lex Recall, and ANCOVAs for any eye AOI or ratio was included only if any main factor was significant. LSD comparisons are not needed because there’s only 2 levels in each group!

Finally, the correlations for Deaf and Hearing separately are not significant. But there are significant correlations across all participants. I worry it is caused by HearingNovice, though…

Rain’s Notes

About Adults:

-I think I want to write it up as an ANCOVA, with direction included. And LSD comparisons instead of Tukey. (I will do my own corrections) -You often have one liners summarizing results, in all tabs, those are nice, keep them coming. -(If you have reasons to present anything other than the ANCOVA, put that in your results tab)

I think if we do it this way then we get a really important story to tell: That the critical AoA cutoff is below 4 vs above 4 years of age (two groups 0-4 vs 4-13). This suggest early ASL is important.

Viewing Space Correlations

Okay now let’s work with the raw viewing space that we created in 05viewingspace. For each participant the first 30 samples was removed.

  • box width
  • upper limit
  • lower limit
  • left side
  • right side
  • height
  • box center position
  • area

correlated with

  • gist
  • lexical recall
  • sign years
  • aoasl

Here’s sample of the raw viewing data structure. I’m also going to fix participant names because the raw viewing data has the old participant names.

Now I’m going to compute the following metrics with the following definitions!

  • upper (75th percentile on y-axis)
  • lower (25th percentile on y-axis)
  • left (25th percentile on x-axis)
  • right (75th percentile on x-axis)
  • width (x-axis IQR)
  • height (y-axis IQR)
  • x-center (median x-axis)
  • y-center (median y-axis)
  • area (x-axis IQR * y-axis IQR)

Now I’ll join the behavioral data with the viewing space metrics. Below is an example of the forward table for viewing space and behavioral data

# Get behavioral measures
eyeperf_fwrv <- fulldata %>%
  filter(eye_exclude == FALSE) %>%
  select(participant, maingroup, hearing, direction, aoasl, signyrs, selfrate, acc, gist, eyes, mouth, neck, facechest) %>%
  group_by(maingroup, participant, direction) %>%
  mutate(gist = mean(gist, na.rm = TRUE),
         lex = mean(acc, na.rm = TRUE),
         eyes = mean(eyes, na.rm = TRUE),
         mouth = mean(mouth, na.rm = TRUE),
         neck = mean(neck, na.rm = TRUE),
         facechest = mean(facechest, na.rm = TRUE)) %>%
  ungroup() %>%
  select(maingroup, participant, hearing, direction, aoasl, signyrs, selfrate, gist, lex) %>%
  distinct()

viewing_metrics_behav <- 
  left_join(viewing_metrics, eyeperf_fwrv, by = c("participant","direction")) %>%
  filter(!is.na(maingroup)) %>%
  select(participant, direction, hearing, maingroup:lex, upper:area) %>%
  gather(metric, value, gist:area) %>%
  unite(metricvalue, c(metric, direction), sep = "_", remove = FALSE) %>%
  select(-metric) %>%
  spread(metricvalue, value) %>%
  ungroup() %>%
  select(-participant, -maingroup)

viewing_fw <- viewing_metrics_behav %>% 
  filter(direction == "forward") %>% 
  select(hearing,
         aoasl,
         signyrs,
         selfrate,
         gist_forward, 
         lex_forward, 
         upper_forward, 
         lower_forward, 
         left_forward, 
         right_forward, 
         width_forward, 
         height_forward, 
         x_center_forward, 
         y_center_forward,
         area_forward)
viewing_fw_deaf <- viewing_fw %>%
  filter(hearing == "Deaf") %>%
  select(-hearing)
viewing_fw_hearing <- viewing_fw %>%
  filter(hearing == "Hearing") %>%
  select(-hearing)
viewing_rv <- viewing_metrics_behav %>% 
  filter(direction == "reversed") %>% 
  select(hearing,
         aoasl,
         signyrs,
         selfrate,
         gist_reversed, 
         lex_reversed, 
         upper_reversed, 
         lower_reversed, 
         left_reversed, 
         right_reversed, 
         width_reversed, 
         height_reversed, 
         x_center_reversed, 
         y_center_reversed,
         area_reversed)
viewing_rv_deaf <- viewing_rv %>%
  filter(hearing == "Deaf") %>%
  select(-hearing)
viewing_rv_hearing <- viewing_rv %>%
  filter(hearing == "Hearing") %>%
  select(-hearing)

viewing_fw <- select(viewing_fw, -hearing)
viewing_rv <- select(viewing_rv, -hearing)

head(viewing_fw,10)

Deaf Viewing Correlations, Forward

[1] "Correlations - Pearson's r"
                       aoasl    signyrs selfrate gist_forward
aoasl             1.00000000 -0.5018827      NaN  0.082663718
signyrs          -0.50188271  1.0000000      NaN  0.183211261
selfrate                 NaN        NaN        1          NaN
gist_forward      0.08266372  0.1832113      NaN  1.000000000
lex_forward       0.11724029  0.3851766      NaN -0.051814432
upper_forward     0.22276900 -0.2059535      NaN  0.044573617
lower_forward     0.17740408 -0.1486075      NaN -0.009906705
left_forward     -0.16560842  0.3251682      NaN  0.319111480
right_forward    -0.06149620  0.2908277      NaN  0.161788931
width_forward     0.03814862  0.1200164      NaN -0.023894681
height_forward   -0.10832061  0.1429820      NaN -0.147926827
x_center_forward -0.03683807  0.2590204      NaN  0.188047153
y_center_forward  0.21023138 -0.1656808      NaN  0.006174181
area_forward      0.03468568  0.1029605      NaN -0.009832728
                  lex_forward upper_forward lower_forward
aoasl             0.117240289    0.22276900   0.177404081
signyrs           0.385176624   -0.20595350  -0.148607493
selfrate                  NaN           NaN           NaN
gist_forward     -0.051814432    0.04457362  -0.009906705
lex_forward       1.000000000   -0.09693139  -0.065050036
upper_forward    -0.096931392    1.00000000   0.933846611
lower_forward    -0.065050036    0.93384661   1.000000000
left_forward     -0.038623876    0.11382223   0.036799624
right_forward     0.027752331    0.14657307   0.337579308
width_forward     0.057139463    0.09332054   0.362742157
height_forward    0.080896222   -0.10393404   0.258678199
x_center_forward  0.007652783    0.21590504   0.362885211
y_center_forward -0.070294840    0.97119234   0.986980746
area_forward      0.066630131    0.11923244   0.402184750
                 left_forward right_forward width_forward
aoasl             -0.16560842   -0.06149620    0.03814862
signyrs            0.32516822    0.29082774    0.12001636
selfrate                  NaN           NaN           NaN
gist_forward       0.31911148    0.16178893   -0.02389468
lex_forward       -0.03862388    0.02775233    0.05713946
upper_forward      0.11382223    0.14657307    0.09332054
lower_forward      0.03679962    0.33757931    0.36274216
left_forward       1.00000000    0.49463212   -0.08905077
right_forward      0.49463212    1.00000000    0.82160221
width_forward     -0.08905077    0.82160221    1.00000000
height_forward    -0.20506900    0.54286009    0.75664871
x_center_forward   0.60577642    0.97867576    0.72426205
y_center_forward   0.07188921    0.30117929    0.29801030
area_forward      -0.04656800    0.82760514    0.97901433
                 height_forward x_center_forward
aoasl               -0.10832061     -0.036838067
signyrs              0.14298200      0.259020382
selfrate                    NaN              NaN
gist_forward        -0.14792683      0.188047153
lex_forward          0.08089622      0.007652783
upper_forward       -0.10393404      0.215905043
lower_forward        0.25867820      0.362885211
left_forward        -0.20506900      0.605776421
right_forward        0.54286009      0.978675763
width_forward        0.75664871      0.724262047
height_forward       1.00000000      0.425984558
x_center_forward     0.42598456      1.000000000
y_center_forward     0.12161654      0.345480098
area_forward         0.79634697      0.754101461
                 y_center_forward area_forward
aoasl                 0.210231379  0.034685675
signyrs              -0.165680761  0.102960533
selfrate                      NaN          NaN
gist_forward          0.006174181 -0.009832728
lex_forward          -0.070294840  0.066630131
upper_forward         0.971192341  0.119232443
lower_forward         0.986980746  0.402184750
left_forward          0.071889205 -0.046568004
right_forward         0.301179290  0.827605136
width_forward         0.298010301  0.979014327
height_forward        0.121616537  0.796346965
x_center_forward      0.345480098  0.754101461
y_center_forward      1.000000000  0.329823848
area_forward          0.329823848  1.000000000
[1] "Correlations - P-values"
                       aoasl     signyrs selfrate gist_forward
aoasl                     NA 0.005536859      NaN   0.66988387
signyrs          0.005536859          NA      NaN   0.34144731
selfrate                 NaN         NaN       NA          NaN
gist_forward     0.669883870 0.341447313      NaN           NA
lex_forward      0.544726419 0.039076613      NaN   0.78951944
upper_forward    0.245419728 0.283786999      NaN   0.81840913
lower_forward    0.357228496 0.441679210      NaN   0.95932259
left_forward     0.390588606 0.085216837      NaN   0.09154227
right_forward    0.751319398 0.125876870      NaN   0.40176098
width_forward    0.844241358 0.535174502      NaN   0.90208021
height_forward   0.575946377 0.459344393      NaN   0.44379691
x_center_forward 0.849530891 0.174844814      NaN   0.32863243
y_center_forward 0.273682515 0.390378724      NaN   0.97464218
area_forward     0.858231980 0.595081840      NaN   0.95962610
                 lex_forward upper_forward lower_forward
aoasl             0.54472642  2.454197e-01  3.572285e-01
signyrs           0.03907661  2.837870e-01  4.416792e-01
selfrate                 NaN           NaN           NaN
gist_forward      0.78951944  8.184091e-01  9.593226e-01
lex_forward               NA  6.169264e-01  7.374353e-01
upper_forward     0.61692641            NA  1.425526e-13
lower_forward     0.73743534  1.425526e-13            NA
left_forward      0.84232477  5.565959e-01  8.496861e-01
right_forward     0.88636586  4.480250e-01  7.330173e-02
width_forward     0.76844399  6.301655e-01  5.311918e-02
height_forward    0.67656008  5.915861e-01  1.754355e-01
x_center_forward  0.96857212  2.606435e-01  5.301852e-02
y_center_forward  0.71709297  0.000000e+00  0.000000e+00
area_forward      0.73128783  5.378637e-01  3.055416e-02
                 left_forward right_forward width_forward
aoasl            0.3905886058  7.513194e-01  8.442414e-01
signyrs          0.0852168366  1.258769e-01  5.351745e-01
selfrate                  NaN           NaN           NaN
gist_forward     0.0915422676  4.017610e-01  9.020802e-01
lex_forward      0.8423247730  8.863659e-01  7.684440e-01
upper_forward    0.5565958763  4.480250e-01  6.301655e-01
lower_forward    0.8496861491  7.330173e-02  5.311918e-02
left_forward               NA  6.378305e-03  6.459661e-01
right_forward    0.0063783049            NA  4.682800e-08
width_forward    0.6459660901  4.682800e-08            NA
height_forward   0.2859055228  2.343920e-03  2.042503e-06
x_center_forward 0.0004968573  0.000000e+00  8.922437e-06
y_center_forward 0.7109457062  1.123599e-01  1.163778e-01
area_forward     0.8104269085  3.063745e-08  0.000000e+00
                 height_forward x_center_forward
aoasl              5.759464e-01     8.495309e-01
signyrs            4.593444e-01     1.748448e-01
selfrate                    NaN              NaN
gist_forward       4.437969e-01     3.286324e-01
lex_forward        6.765601e-01     9.685721e-01
upper_forward      5.915861e-01     2.606435e-01
lower_forward      1.754355e-01     5.301852e-02
left_forward       2.859055e-01     4.968573e-04
right_forward      2.343920e-03     0.000000e+00
width_forward      2.042503e-06     8.922437e-06
height_forward               NA     2.121700e-02
x_center_forward   2.121700e-02               NA
y_center_forward   5.297050e-01     6.641452e-02
area_forward       2.383184e-07     2.312126e-06
                 y_center_forward area_forward
aoasl                  0.27368252 8.582320e-01
signyrs                0.39037872 5.950818e-01
selfrate                      NaN          NaN
gist_forward           0.97464218 9.596261e-01
lex_forward            0.71709297 7.312878e-01
upper_forward          0.00000000 5.378637e-01
lower_forward          0.00000000 3.055416e-02
left_forward           0.71094571 8.104269e-01
right_forward          0.11235989 3.063745e-08
width_forward          0.11637775 0.000000e+00
height_forward         0.52970503 2.383184e-07
x_center_forward       0.06641452 2.312126e-06
y_center_forward               NA 8.058557e-02
area_forward           0.08058557           NA

Deaf Viewing Correlations, Reversed

[1] "Correlations - Pearson's r"
                         aoasl     signyrs selfrate
aoasl              1.000000000 -0.50300054      NaN
signyrs           -0.503000541  1.00000000      NaN
selfrate                   NaN         NaN        1
gist_reversed     -0.226608568 -0.10665206      NaN
lex_reversed      -0.167800596 -0.02521081      NaN
upper_reversed     0.101951202 -0.08676855      NaN
lower_reversed     0.113063926 -0.10887118      NaN
left_reversed     -0.201770397  0.32283237      NaN
right_reversed    -0.231537042  0.37951201      NaN
width_reversed    -0.043917120  0.08763168      NaN
height_reversed    0.007116611 -0.04774316      NaN
x_center_reversed -0.198076727  0.32655812      NaN
y_center_reversed  0.105498214 -0.08154445      NaN
area_reversed     -0.047446603  0.05434785      NaN
                  gist_reversed lex_reversed upper_reversed
aoasl              -0.226608568 -0.167800596    0.101951202
signyrs            -0.106652058 -0.025210812   -0.086768548
selfrate                    NaN          NaN            NaN
gist_reversed       1.000000000  0.303169035   -0.335941110
lex_reversed        0.303169035  1.000000000    0.008202664
upper_reversed     -0.335941110  0.008202664    1.000000000
lower_reversed     -0.368524049 -0.121148925    0.961254345
left_reversed       0.037616571 -0.163974000   -0.106090037
right_reversed     -0.046700900 -0.266614412   -0.293614256
width_reversed     -0.164183307 -0.186162371   -0.352755582
height_reversed    -0.010148541 -0.428809956   -0.417272208
x_center_reversed   0.002943648 -0.208773455   -0.189508307
y_center_reversed  -0.371637459 -0.049562859    0.993730373
area_reversed      -0.145123840 -0.368637739   -0.377499095
                  lower_reversed left_reversed right_reversed
aoasl                  0.1130639   -0.20177040    -0.23153704
signyrs               -0.1088712    0.32283237     0.37951201
selfrate                     NaN           NaN            NaN
gist_reversed         -0.3685240    0.03761657    -0.04670090
lex_reversed          -0.1211489   -0.16397400    -0.26661441
upper_reversed         0.9612543   -0.10609004    -0.29361426
lower_reversed         1.0000000   -0.19918550    -0.33227808
left_reversed         -0.1991855    1.00000000     0.86912864
right_reversed        -0.3322781    0.86912864     1.00000000
width_reversed        -0.2422721   -0.31632865     0.19425864
height_reversed       -0.1505873   -0.27619176    -0.04245073
x_center_reversed     -0.2613117    0.97342941     0.95038194
y_center_reversed      0.9812746   -0.13741531    -0.30074865
area_reversed         -0.1558549   -0.37452036     0.05324661
                  width_reversed height_reversed
aoasl                -0.04391712     0.007116611
signyrs               0.08763168    -0.047743159
selfrate                     NaN             NaN
gist_reversed        -0.16418331    -0.010148541
lex_reversed         -0.18616237    -0.428809956
upper_reversed       -0.35275558    -0.417272208
lower_reversed       -0.24227207    -0.150587284
left_reversed        -0.31632865    -0.276191762
right_reversed        0.19425864    -0.042450731
width_reversed        1.00000000     0.466368814
height_reversed       0.46636881     1.000000000
x_center_reversed    -0.10777983    -0.181845074
y_center_reversed    -0.30431004    -0.328786893
area_reversed         0.84494541     0.839997806
                  x_center_reversed y_center_reversed
aoasl                  -0.198076727        0.10549821
signyrs                 0.326558116       -0.08154445
selfrate                        NaN               NaN
gist_reversed           0.002943648       -0.37163746
lex_reversed           -0.208773455       -0.04956286
upper_reversed         -0.189508307        0.99373037
lower_reversed         -0.261311696        0.98127455
left_reversed           0.973429412       -0.13741531
right_reversed          0.950381943       -0.30074865
width_reversed         -0.107779835       -0.30431004
height_reversed        -0.181845074       -0.32878689
x_center_reversed       1.000000000       -0.21177835
y_center_reversed      -0.211778355        1.00000000
area_reversed          -0.208337840       -0.29641837
                  area_reversed
aoasl               -0.04744660
signyrs              0.05434785
selfrate                    NaN
gist_reversed       -0.14512384
lex_reversed        -0.36863774
upper_reversed      -0.37749909
lower_reversed      -0.15585490
left_reversed       -0.37452036
right_reversed       0.05324661
width_reversed       0.84494541
height_reversed      0.83999781
x_center_reversed   -0.20833784
y_center_reversed   -0.29641837
area_reversed        1.00000000
[1] "Correlations - P-values"
                        aoasl     signyrs selfrate
aoasl                      NA 0.006366985      NaN
signyrs           0.006366985          NA      NaN
selfrate                  NaN         NaN       NA
gist_reversed     0.246214837 0.589083651      NaN
lex_reversed      0.393376109 0.898670598      NaN
upper_reversed    0.605695402 0.660637889      NaN
lower_reversed    0.566750822 0.581311183      NaN
left_reversed     0.303183924 0.093818322      NaN
right_reversed    0.235814234 0.046386373      NaN
width_reversed    0.824392286 0.657464313      NaN
height_reversed   0.971329380 0.809359572      NaN
x_center_reversed 0.312306765 0.089874977      NaN
y_center_reversed 0.593142720 0.679967024      NaN
area_reversed     0.810522467 0.783567332      NaN
                  gist_reversed lex_reversed upper_reversed
aoasl                0.24621484   0.39337611   6.056954e-01
signyrs              0.58908365   0.89867060   6.606379e-01
selfrate                    NaN          NaN            NaN
gist_reversed                NA   0.11682334   8.050045e-02
lex_reversed         0.11682334           NA   9.669562e-01
upper_reversed       0.08050045   0.96695621             NA
lower_reversed       0.05364705   0.53914843   4.440892e-16
left_reversed        0.84927772   0.40440769   5.910593e-01
right_reversed       0.81344835   0.17023651   1.293989e-01
width_reversed       0.40379982   0.34287816   6.559217e-02
height_reversed      0.95912323   0.02279456   2.715960e-02
x_center_reversed    0.98813896   0.28635013   3.341168e-01
y_center_reversed    0.05150479   0.80223269   0.000000e+00
area_reversed        0.46122802   0.05356761   4.765470e-02
                  lower_reversed left_reversed right_reversed
aoasl               5.667508e-01  3.031839e-01   2.358142e-01
signyrs             5.813112e-01  9.381832e-02   4.638637e-02
selfrate                     NaN           NaN            NaN
gist_reversed       5.364705e-02  8.492777e-01   8.134483e-01
lex_reversed        5.391484e-01  4.044077e-01   1.702365e-01
upper_reversed      4.440892e-16  5.910593e-01   1.293989e-01
lower_reversed                NA  3.095506e-01   8.406690e-02
left_reversed       3.095506e-01            NA   1.979651e-09
right_reversed      8.406690e-02  1.979651e-09             NA
width_reversed      2.141845e-01  1.010127e-01   3.219137e-01
height_reversed     4.443424e-01  1.548274e-01   8.301702e-01
x_center_reversed   1.792184e-01  0.000000e+00   1.065814e-14
y_center_reversed   0.000000e+00  4.856146e-01   1.199199e-01
area_reversed       4.283817e-01  4.958172e-02   7.878531e-01
                  width_reversed height_reversed
aoasl               8.243923e-01    9.713294e-01
signyrs             6.574643e-01    8.093596e-01
selfrate                     NaN             NaN
gist_reversed       4.037998e-01    9.591232e-01
lex_reversed        3.428782e-01    2.279456e-02
upper_reversed      6.559217e-02    2.715960e-02
lower_reversed      2.141845e-01    4.443424e-01
left_reversed       1.010127e-01    1.548274e-01
right_reversed      3.219137e-01    8.301702e-01
width_reversed                NA    1.236432e-02
height_reversed     1.236432e-02              NA
x_center_reversed   5.851280e-01    3.543850e-01
y_center_reversed   1.153842e-01    8.757679e-02
area_reversed       1.554224e-08    2.269863e-08
                  x_center_reversed y_center_reversed
aoasl                  3.123068e-01        0.59314272
signyrs                8.987498e-02        0.67996702
selfrate                        NaN               NaN
gist_reversed          9.881390e-01        0.05150479
lex_reversed           2.863501e-01        0.80223269
upper_reversed         3.341168e-01        0.00000000
lower_reversed         1.792184e-01        0.00000000
left_reversed          0.000000e+00        0.48561456
right_reversed         1.065814e-14        0.11991989
width_reversed         5.851280e-01        0.11538424
height_reversed        3.543850e-01        0.08757679
x_center_reversed                NA        0.27931294
y_center_reversed      2.793129e-01                NA
area_reversed          2.873796e-01        0.12561011
                  area_reversed
aoasl              8.105225e-01
signyrs            7.835673e-01
selfrate                    NaN
gist_reversed      4.612280e-01
lex_reversed       5.356761e-02
upper_reversed     4.765470e-02
lower_reversed     4.283817e-01
left_reversed      4.958172e-02
right_reversed     7.878531e-01
width_reversed     1.554224e-08
height_reversed    2.269863e-08
x_center_reversed  2.873796e-01
y_center_reversed  1.256101e-01
area_reversed                NA

Hearing Viewing Correlations, Forward

[1] "Correlations - Pearson's r"
                       aoasl     signyrs    selfrate
aoasl             1.00000000 -0.07887014  0.01385561
signyrs          -0.07887014  1.00000000  0.73847851
selfrate          0.01385561  0.73847851  1.00000000
gist_forward     -0.15525565  0.57814668  0.70963997
lex_forward       0.08908095  0.26130640  0.47076831
upper_forward     0.34941310 -0.13453355 -0.13376451
lower_forward     0.20590345 -0.22613997 -0.18677658
left_forward     -0.05141619  0.08821355  0.36718414
right_forward    -0.21900963  0.11569295  0.41681940
width_forward    -0.36826535  0.05341980  0.07835181
height_forward   -0.18298261 -0.17758474 -0.11227107
x_center_forward -0.11209472  0.04108265  0.38386799
y_center_forward  0.30487906 -0.19751061 -0.16246899
area_forward     -0.34011139  0.06345770  0.05021929
                 gist_forward lex_forward upper_forward
aoasl             -0.15525565  0.08908095    0.34941310
signyrs            0.57814668  0.26130640   -0.13453355
selfrate           0.70963997  0.47076831   -0.13376451
gist_forward       1.00000000  0.52977525   -0.23917461
lex_forward        0.52977525  1.00000000    0.05096588
upper_forward     -0.23917461  0.05096588    1.00000000
lower_forward     -0.28737646 -0.04066124    0.81072841
left_forward       0.28496008  0.51274026   -0.03738438
right_forward      0.33033867  0.52155630   -0.21593012
width_forward      0.07606009 -0.02513886   -0.39384943
height_forward    -0.12206492 -0.14608791   -0.14968228
x_center_forward   0.27761869  0.48736076   -0.08373722
y_center_forward  -0.25737919  0.02756594    0.97334262
area_forward       0.03946279 -0.06444704   -0.33132094
                 lower_forward left_forward right_forward
aoasl               0.20590345  -0.05141619   -0.21900963
signyrs            -0.22613997   0.08821355    0.11569295
selfrate           -0.18677658   0.36718414    0.41681940
gist_forward       -0.28737646   0.28496008    0.33033867
lex_forward        -0.04066124   0.51274026    0.52155630
upper_forward       0.81072841  -0.03738438   -0.21593012
lower_forward       1.00000000  -0.35104995   -0.33353656
left_forward       -0.35104995   1.00000000    0.90348212
right_forward      -0.33353656   0.90348212    1.00000000
width_forward       0.06958863  -0.30194036    0.13582274
height_forward      0.45747549  -0.53611208   -0.23533283
x_center_forward   -0.29967060   0.97660262    0.95313558
y_center_forward    0.91343916  -0.15817767   -0.26314104
area_forward        0.22571172  -0.48057627   -0.08236247
                 width_forward height_forward x_center_forward
aoasl              -0.36826535    -0.18298261      -0.11209472
signyrs             0.05341980    -0.17758474       0.04108265
selfrate            0.07835181    -0.11227107       0.38386799
gist_forward        0.07606009    -0.12206492       0.27761869
lex_forward        -0.02513886    -0.14608791       0.48736076
upper_forward      -0.39384943    -0.14968228      -0.08373722
lower_forward       0.06958863     0.45747549      -0.29967060
left_forward       -0.30194036    -0.53611208       0.97660262
right_forward       0.13582274    -0.23533283       0.95313558
width_forward       1.00000000     0.71576402      -0.13742263
height_forward      0.71576402     1.00000000      -0.37892901
x_center_forward   -0.13742263    -0.37892901       1.00000000
y_center_forward   -0.21964976     0.06427939      -0.16702029
area_forward        0.92762615     0.88446699      -0.32508184
                 y_center_forward area_forward
aoasl                  0.30487906  -0.34011139
signyrs               -0.19751061   0.06345770
selfrate              -0.16246899   0.05021929
gist_forward          -0.25737919   0.03946279
lex_forward            0.02756594  -0.06444704
upper_forward          0.97334262  -0.33132094
lower_forward          0.91343916   0.22571172
left_forward          -0.15817767  -0.48057627
right_forward         -0.26314104  -0.08236247
width_forward         -0.21964976   0.92762615
height_forward         0.06427939   0.88446699
x_center_forward      -0.16702029  -0.32508184
y_center_forward       1.00000000  -0.13487348
area_forward          -0.13487348   1.00000000
[1] "Correlations - P-values"
                     aoasl      signyrs     selfrate
aoasl                   NA 0.7205586083 0.9499685271
signyrs          0.7205586           NA 0.0000573213
selfrate         0.9499685 0.0000573213           NA
gist_forward     0.4793399 0.0038575060 0.0001492417
lex_forward      0.6860671 0.2284506503 0.0233767693
upper_forward    0.1022036 0.5405296237 0.5428679449
lower_forward    0.3459041 0.2994714694 0.3934694052
left_forward     0.8157723 0.6889747833 0.0847895319
right_forward    0.3153702 0.5991154130 0.0478577002
width_forward    0.0838069 0.8087198039 0.7223242762
height_forward   0.4033205 0.4175691700 0.6100345931
x_center_forward 0.6105996 0.8523536985 0.0705591352
y_center_forward 0.1572005 0.3663408883 0.4588967502
area_forward     0.1123056 0.7736141099 0.8199918731
                 gist_forward lex_forward upper_forward
aoasl            0.4793399006 0.686067097  1.022036e-01
signyrs          0.0038575060 0.228450650  5.405296e-01
selfrate         0.0001492417 0.023376769  5.428679e-01
gist_forward               NA 0.009323943  2.717140e-01
lex_forward      0.0093239427          NA  8.173593e-01
upper_forward    0.2717139922 0.817359252            NA
lower_forward    0.1836491479 0.853852321  2.718069e-06
left_forward     0.1875265304 0.012356772  8.655217e-01
right_forward    0.1236849613 0.010699696  3.223925e-01
width_forward    0.7301473181 0.909351946  6.296018e-02
height_forward   0.5790049656 0.505970588  4.954445e-01
x_center_forward 0.1996487227 0.018334617  7.040473e-01
y_center_forward 0.2357738122 0.900640350  6.661338e-15
area_forward     0.8581168782 0.770176021  1.225050e-01
                 lower_forward left_forward right_forward
aoasl             3.459041e-01 8.157723e-01  3.153702e-01
signyrs           2.994715e-01 6.889748e-01  5.991154e-01
selfrate          3.934694e-01 8.478953e-02  4.785770e-02
gist_forward      1.836491e-01 1.875265e-01  1.236850e-01
lex_forward       8.538523e-01 1.235677e-02  1.069970e-02
upper_forward     2.718069e-06 8.655217e-01  3.223925e-01
lower_forward               NA 1.004976e-01  1.198734e-01
left_forward      1.004976e-01           NA  3.541828e-09
right_forward     1.198734e-01 3.541828e-09            NA
width_forward     7.523769e-01 1.614428e-01  5.366202e-01
height_forward    2.817292e-02 8.365930e-03  2.797194e-01
x_center_forward  1.647737e-01 1.776357e-15  2.244871e-12
y_center_forward  1.180958e-09 4.710037e-01  2.250816e-01
area_forward      3.004121e-01 2.027749e-02  7.086984e-01
                 width_forward height_forward x_center_forward
aoasl             8.380690e-02   4.033205e-01     6.105996e-01
signyrs           8.087198e-01   4.175692e-01     8.523537e-01
selfrate          7.223243e-01   6.100346e-01     7.055914e-02
gist_forward      7.301473e-01   5.790050e-01     1.996487e-01
lex_forward       9.093519e-01   5.059706e-01     1.833462e-02
upper_forward     6.296018e-02   4.954445e-01     7.040473e-01
lower_forward     7.523769e-01   2.817292e-02     1.647737e-01
left_forward      1.614428e-01   8.365930e-03     1.776357e-15
right_forward     5.366202e-01   2.797194e-01     2.244871e-12
width_forward               NA   1.229699e-04     5.317870e-01
height_forward    1.229699e-04             NA     7.456754e-02
x_center_forward  5.317870e-01   7.456754e-02               NA
y_center_forward  3.139223e-01   7.707583e-01     4.462352e-01
area_forward      1.921421e-10   2.146623e-08     1.301398e-01
                 y_center_forward area_forward
aoasl                1.572005e-01 1.123056e-01
signyrs              3.663409e-01 7.736141e-01
selfrate             4.588968e-01 8.199919e-01
gist_forward         2.357738e-01 8.581169e-01
lex_forward          9.006403e-01 7.701760e-01
upper_forward        6.661338e-15 1.225050e-01
lower_forward        1.180958e-09 3.004121e-01
left_forward         4.710037e-01 2.027749e-02
right_forward        2.250816e-01 7.086984e-01
width_forward        3.139223e-01 1.921421e-10
height_forward       7.707583e-01 2.146623e-08
x_center_forward     4.462352e-01 1.301398e-01
y_center_forward               NA 5.394975e-01
area_forward         5.394975e-01           NA

Hearing Viewing Correlations, Reversed

[1] "Correlations - Pearson's r"
                        aoasl     signyrs    selfrate
aoasl              1.00000000 -0.07887014  0.01385561
signyrs           -0.07887014  1.00000000  0.73847851
selfrate           0.01385561  0.73847851  1.00000000
gist_reversed      0.07815752  0.28845747  0.52144079
lex_reversed       0.06994866  0.22209268  0.36876982
upper_reversed     0.29120518 -0.22765477 -0.18131365
lower_reversed     0.27919511 -0.35447890 -0.20364781
left_reversed     -0.14427562  0.07819807  0.35847303
right_reversed    -0.21672772  0.05733023  0.33877006
width_reversed    -0.18005639 -0.05186101 -0.04896778
height_reversed   -0.01361460 -0.20464317 -0.03864136
x_center_reversed -0.15748245  0.08238514  0.36619379
y_center_reversed  0.29856528 -0.27503476 -0.18721635
area_reversed     -0.05431629 -0.04452477  0.01864461
                  gist_reversed lex_reversed upper_reversed
aoasl               0.078157516   0.06994866     0.29120518
signyrs             0.288457469   0.22209268    -0.22765477
selfrate            0.521440792   0.36876982    -0.18131365
gist_reversed       1.000000000   0.61989299     0.29483622
lex_reversed        0.619892993   1.00000000     0.22990466
upper_reversed      0.294836217   0.22990466     1.00000000
lower_reversed      0.174618778   0.08420977     0.79754835
left_reversed       0.161581467   0.11546114    -0.09117055
right_reversed      0.005462218   0.06471615    -0.25686115
width_reversed     -0.387987042  -0.12611167    -0.41177214
height_reversed    -0.184570722  -0.22603496    -0.30154539
x_center_reversed   0.088240227   0.10339721    -0.17253477
y_center_reversed   0.295955810   0.22641186     0.98072096
area_reversed      -0.350326607  -0.27433854    -0.40965102
                  lower_reversed left_reversed right_reversed
aoasl                 0.27919511   -0.14427562   -0.216727716
signyrs              -0.35447890    0.07819807    0.057330234
selfrate             -0.20364781    0.35847303    0.338770060
gist_reversed         0.17461878    0.16158147    0.005462218
lex_reversed          0.08420977    0.11546114    0.064716150
upper_reversed        0.79754835   -0.09117055   -0.256861147
lower_reversed        1.00000000   -0.24249436   -0.224835180
left_reversed        -0.24249436    1.00000000    0.919043897
right_reversed       -0.22483518    0.91904390    1.000000000
width_reversed        0.04388789   -0.20119735    0.201185807
height_reversed       0.33467758   -0.24084955    0.045882991
x_center_reversed    -0.23547460    0.98036143    0.966367121
y_center_reversed     0.88877414   -0.11486547   -0.237773596
area_reversed         0.18353484   -0.28033984    0.067378502
                  width_reversed height_reversed
aoasl                -0.18005639     -0.01361460
signyrs              -0.05186101     -0.20464317
selfrate             -0.04896778     -0.03864136
gist_reversed        -0.38798704     -0.18457072
lex_reversed         -0.12611167     -0.22603496
upper_reversed       -0.41177214     -0.30154539
lower_reversed        0.04388789      0.33467758
left_reversed        -0.20119735     -0.24084955
right_reversed        0.20118581      0.04588299
width_reversed        1.00000000      0.71258642
height_reversed       0.71258642      1.00000000
x_center_reversed    -0.03478441     -0.10265730
y_center_reversed    -0.30544942     -0.12724651
area_reversed         0.86414799      0.92998674
                  x_center_reversed y_center_reversed
aoasl                   -0.15748245         0.2985653
signyrs                  0.08238514        -0.2750348
selfrate                 0.36619379        -0.1872164
gist_reversed            0.08824023         0.2959558
lex_reversed             0.10339721         0.2264119
upper_reversed          -0.17253477         0.9807210
lower_reversed          -0.23547460         0.8887741
left_reversed            0.98036143        -0.1148655
right_reversed           0.96636712        -0.2377736
width_reversed          -0.03478441        -0.3054494
height_reversed         -0.10265730        -0.1272465
x_center_reversed        1.00000000        -0.1714985
y_center_reversed       -0.17149848         1.0000000
area_reversed           -0.11948840        -0.2622320
                  area_reversed
aoasl               -0.05431629
signyrs             -0.04452477
selfrate             0.01864461
gist_reversed       -0.35032661
lex_reversed        -0.27433854
upper_reversed      -0.40965102
lower_reversed       0.18353484
left_reversed       -0.28033984
right_reversed       0.06737850
width_reversed       0.86414799
height_reversed      0.92998674
x_center_reversed   -0.11948840
y_center_reversed   -0.26223203
area_reversed        1.00000000
[1] "Correlations - P-values"
                      aoasl      signyrs     selfrate
aoasl                    NA 0.7205586083 0.9499685271
signyrs           0.7205586           NA 0.0000573213
selfrate          0.9499685 0.0000573213           NA
gist_reversed     0.7229865 0.1819324846 0.0107201595
lex_reversed      0.7511350 0.3084339611 0.0833513648
upper_reversed    0.1776188 0.2961588839 0.4076969259
lower_reversed    0.1970021 0.0969920639 0.3513292733
left_reversed     0.5113189 0.7228482691 0.0930238744
right_reversed    0.3205647 0.7949973825 0.1138204336
width_reversed    0.4110110 0.8142053576 0.8244091489
height_reversed   0.9508378 0.3489291557 0.8610420739
x_center_reversed 0.4729803 0.7086216120 0.0856971286
y_center_reversed 0.1664130 0.2040386253 0.3923363331
area_reversed     0.8055689 0.8401318272 0.9327090230
                  gist_reversed lex_reversed upper_reversed
aoasl               0.722986491  0.751135019   1.776188e-01
signyrs             0.181932485  0.308433961   2.961589e-01
selfrate            0.010720159  0.083351365   4.076969e-01
gist_reversed                NA  0.001604979   1.720272e-01
lex_reversed        0.001604979           NA   2.912809e-01
upper_reversed      0.172027240  0.291280889             NA
lower_reversed      0.425513766  0.702451010   5.178149e-06
left_reversed       0.461387355  0.599852518   6.790800e-01
right_reversed      0.980266257  0.769241540   2.367512e-01
width_reversed      0.067343150  0.566387826   5.090588e-02
height_reversed     0.399180414  0.299701961   1.620190e-01
x_center_reversed   0.688885303  0.638723603   4.311445e-01
y_center_reversed   0.170328040  0.298875228   2.220446e-16
area_reversed       0.101248876  0.205232495   5.223092e-02
                  lower_reversed left_reversed right_reversed
aoasl               1.970021e-01  5.113189e-01   3.205647e-01
signyrs             9.699206e-02  7.228483e-01   7.949974e-01
selfrate            3.513293e-01  9.302387e-02   1.138204e-01
gist_reversed       4.255138e-01  4.613874e-01   9.802663e-01
lex_reversed        7.024510e-01  5.998525e-01   7.692415e-01
upper_reversed      5.178149e-06  6.790800e-01   2.367512e-01
lower_reversed                NA  2.649147e-01   3.023431e-01
left_reversed       2.649147e-01            NA   5.996887e-10
right_reversed      3.023431e-01  5.996887e-10             NA
width_reversed      8.423906e-01  3.572792e-01   3.573074e-01
height_reversed     1.185342e-01  2.682698e-01   8.353189e-01
x_center_reversed   2.794214e-01  2.220446e-16   7.305268e-14
y_center_reversed   1.469011e-08  6.017484e-01   2.746164e-01
area_reversed       4.018782e-01  1.950953e-01   7.600135e-01
                  width_reversed height_reversed
aoasl               4.110110e-01    9.508378e-01
signyrs             8.142054e-01    3.489292e-01
selfrate            8.244091e-01    8.610421e-01
gist_reversed       6.734315e-02    3.991804e-01
lex_reversed        5.663878e-01    2.997020e-01
upper_reversed      5.090588e-02    1.620190e-01
lower_reversed      8.423906e-01    1.185342e-01
left_reversed       3.572792e-01    2.682698e-01
right_reversed      3.573074e-01    8.353189e-01
width_reversed                NA    1.360488e-04
height_reversed     1.360488e-04              NA
x_center_reversed   8.748001e-01    6.411393e-01
y_center_reversed   1.563863e-01    5.628717e-01
area_reversed       1.071790e-07    1.370859e-10
                  x_center_reversed y_center_reversed
aoasl                  4.729803e-01      1.664130e-01
signyrs                7.086216e-01      2.040386e-01
selfrate               8.569713e-02      3.923363e-01
gist_reversed          6.888853e-01      1.703280e-01
lex_reversed           6.387236e-01      2.988752e-01
upper_reversed         4.311445e-01      2.220446e-16
lower_reversed         2.794214e-01      1.469011e-08
left_reversed          2.220446e-16      6.017484e-01
right_reversed         7.305268e-14      2.746164e-01
width_reversed         8.748001e-01      1.563863e-01
height_reversed        6.411393e-01      5.628717e-01
x_center_reversed                NA      4.339592e-01
y_center_reversed      4.339592e-01                NA
area_reversed          5.871013e-01      2.267467e-01
                  area_reversed
aoasl              8.055689e-01
signyrs            8.401318e-01
selfrate           9.327090e-01
gist_reversed      1.012489e-01
lex_reversed       2.052325e-01
upper_reversed     5.223092e-02
lower_reversed     4.018782e-01
left_reversed      1.950953e-01
right_reversed     7.600135e-01
width_reversed     1.071790e-07
height_reversed    1.370859e-10
x_center_reversed  5.871013e-01
y_center_reversed  2.267467e-01
area_reversed                NA

All Viewing Correlations, Forward

[1] "Correlations - Pearson's r"
                        aoasl     signyrs     selfrate
aoasl             1.000000000 -0.78522450 -0.506162780
signyrs          -0.785224499  1.00000000  0.709593416
selfrate         -0.506162780  0.70959342  1.000000000
gist_forward     -0.323090309  0.49561829  0.734904339
lex_forward      -0.142631690  0.36334718  0.461124386
upper_forward     0.001356982  0.06040359  0.075103941
lower_forward    -0.006478702  0.03249385  0.021259710
left_forward     -0.092727087  0.13149298  0.288534412
right_forward    -0.055398102  0.10558031  0.239055036
width_forward     0.041759354 -0.01759425 -0.027238292
height_forward   -0.017349603 -0.05616254 -0.112550975
x_center_forward -0.070069701  0.12029249  0.266321218
y_center_forward -0.019405542  0.07602873  0.072900352
area_forward     -0.006446590  0.03916390  0.007284405
                 gist_forward  lex_forward upper_forward
aoasl            -0.323090309 -0.142631690   0.001356982
signyrs           0.495618291  0.363347176   0.060403594
selfrate          0.734904339  0.461124386   0.075103941
gist_forward      1.000000000  0.487500111  -0.030892283
lex_forward       0.487500111  1.000000000   0.033564922
upper_forward    -0.030892283  0.033564922   1.000000000
lower_forward    -0.088990001 -0.006277048   0.895914754
left_forward      0.282620913  0.397213416   0.029398539
right_forward     0.249726848  0.346656182  -0.019205190
width_forward    -0.002695181 -0.010451179  -0.069875701
height_forward   -0.132791275 -0.085513496  -0.130894700
x_center_forward  0.244784902  0.345540652   0.073676443
y_center_forward -0.038638736  0.036020310   0.972782277
area_forward      0.008445134 -0.000269198  -0.001654218
                 lower_forward left_forward right_forward
aoasl             -0.006478702  -0.09272709   -0.05539810
signyrs            0.032493854   0.13149298    0.10558031
selfrate           0.021259710   0.28853441    0.23905504
gist_forward      -0.088990001   0.28262091    0.24972685
lex_forward       -0.006277048   0.39721342    0.34665618
upper_forward      0.895914754   0.02939854   -0.01920519
lower_forward      1.000000000  -0.16475325    0.01644207
left_forward      -0.164753246   1.00000000    0.76998750
right_forward      0.016442071   0.76998750    1.00000000
width_forward      0.251135368  -0.18455371    0.48499462
height_forward     0.323133527  -0.43031510    0.07760803
x_center_forward   0.034056606   0.87139157    0.95923973
y_center_forward   0.962259137  -0.04127392    0.04347490
area_forward       0.343583009  -0.22389339    0.42376270
                 width_forward height_forward x_center_forward
aoasl              0.041759354    -0.01734960      -0.07006970
signyrs           -0.017594255    -0.05616254       0.12029249
selfrate          -0.027238292    -0.11255097       0.26632122
gist_forward      -0.002695181    -0.13279127       0.24478490
lex_forward       -0.010451179    -0.08551350       0.34554065
upper_forward     -0.069875701    -0.13089470       0.07367644
lower_forward      0.251135368     0.32313353       0.03405661
left_forward      -0.184553709    -0.43031510       0.87139157
right_forward      0.484994616     0.07760803       0.95923973
width_forward      1.000000000     0.70932760       0.28322691
height_forward     0.709327601     1.00000000      -0.08095059
x_center_forward   0.283226906    -0.08095059       1.00000000
y_center_forward   0.123535393     0.07515167       0.10167993
area_forward       0.959601109     0.77031146       0.25781177
                 y_center_forward area_forward
aoasl                 -0.01940554 -0.006446590
signyrs                0.07602873  0.039163904
selfrate               0.07290035  0.007284405
gist_forward          -0.03863874  0.008445134
lex_forward            0.03602031 -0.000269198
upper_forward          0.97278228 -0.001654218
lower_forward          0.96225914  0.343583009
left_forward          -0.04127392 -0.223893386
right_forward          0.04347490  0.423762703
width_forward          0.12353539  0.959601109
height_forward         0.07515167  0.770311458
x_center_forward       0.10167993  0.257811768
y_center_forward       1.00000000  0.203034404
area_forward           0.20303440  1.000000000
[1] "Correlations - P-values"
                        aoasl      signyrs     selfrate
aoasl                      NA 5.523138e-12 1.290502e-04
signyrs          5.523138e-12           NA 3.880305e-09
selfrate         1.290502e-04 3.880305e-09           NA
gist_forward     1.947866e-02 1.870210e-04 5.548224e-10
lex_forward      3.131194e-01 8.106491e-03 5.807582e-04
upper_forward    9.923823e-01 6.705620e-01 5.966908e-01
lower_forward    9.636423e-01 8.191170e-01 8.810833e-01
left_forward     5.132272e-01 3.527841e-01 3.804048e-02
right_forward    6.964847e-01 4.563149e-01 8.786113e-02
width_forward    7.688045e-01 9.014742e-01 8.479938e-01
height_forward   9.028376e-01 6.925025e-01 4.269533e-01
x_center_forward 6.215856e-01 3.956335e-01 5.633837e-02
y_center_forward 8.913893e-01 5.921659e-01 6.075337e-01
area_forward     9.638224e-01 7.828127e-01 9.591245e-01
                 gist_forward  lex_forward upper_forward
aoasl            1.947866e-02 0.3131194308     0.9923823
signyrs          1.870210e-04 0.0081064913     0.6705620
selfrate         5.548224e-10 0.0005807582     0.5966908
gist_forward               NA 0.0002468462     0.8278935
lex_forward      2.468462e-04           NA     0.8132598
upper_forward    8.278935e-01 0.8132597516            NA
lower_forward    5.304212e-01 0.9647732695     0.0000000
left_forward     4.235051e-02 0.0035487005     0.8360980
right_forward    7.419046e-02 0.0118154757     0.8925040
width_forward    9.848708e-01 0.9413808296     0.6225537
height_forward   3.480087e-01 0.5466668491     0.3549982
x_center_forward 8.029520e-02 0.0121084854     0.6037052
y_center_forward 7.856557e-01 0.7998708837     0.0000000
area_forward     9.526181e-01 0.9984887883     0.9907138
                 lower_forward left_forward right_forward
aoasl               0.96364234 5.132272e-01  6.964847e-01
signyrs             0.81911699 3.527841e-01  4.563149e-01
selfrate            0.88108331 3.804048e-02  8.786113e-02
gist_forward        0.53042122 4.235051e-02  7.419046e-02
lex_forward         0.96477327 3.548700e-03  1.181548e-02
upper_forward       0.00000000 8.360980e-01  8.925040e-01
lower_forward               NA 2.431422e-01  9.078974e-01
left_forward        0.24314223           NA  2.519274e-11
right_forward       0.90789743 2.519274e-11            NA
width_forward       0.07251963 1.902743e-01  2.685495e-04
height_forward      0.01946145 1.451862e-03  5.844742e-01
x_center_forward    0.81057430 0.000000e+00  0.000000e+00
y_center_forward    0.00000000 7.714191e-01  7.595850e-01
area_forward        0.01263779 1.105780e-01  1.745315e-03
                 width_forward height_forward x_center_forward
aoasl             7.688045e-01   9.028376e-01       0.62158561
signyrs           9.014742e-01   6.925025e-01       0.39563346
selfrate          8.479938e-01   4.269533e-01       0.05633837
gist_forward      9.848708e-01   3.480087e-01       0.08029520
lex_forward       9.413808e-01   5.466668e-01       0.01210849
upper_forward     6.225537e-01   3.549982e-01       0.60370519
lower_forward     7.251963e-02   1.946145e-02       0.81057430
left_forward      1.902743e-01   1.451862e-03       0.00000000
right_forward     2.685495e-04   5.844742e-01       0.00000000
width_forward               NA   3.956054e-09       0.04189120
height_forward    3.956054e-09             NA       0.56834513
x_center_forward  4.189120e-02   5.683451e-01               NA
y_center_forward  3.829247e-01   5.964569e-01       0.47321205
area_forward      0.000000e+00   2.442246e-11       0.06500208
                 y_center_forward area_forward
aoasl                   0.8913893 9.638224e-01
signyrs                 0.5921659 7.828127e-01
selfrate                0.6075337 9.591245e-01
gist_forward            0.7856557 9.526181e-01
lex_forward             0.7998709 9.984888e-01
upper_forward           0.0000000 9.907138e-01
lower_forward           0.0000000 1.263779e-02
left_forward            0.7714191 1.105780e-01
right_forward           0.7595850 1.745315e-03
width_forward           0.3829247 0.000000e+00
height_forward          0.5964569 2.442246e-11
x_center_forward        0.4732121 6.500208e-02
y_center_forward               NA 1.488528e-01
area_forward            0.1488528           NA

All Viewing Correlations, Reversed

[1] "Correlations - Pearson's r"
                         aoasl     signyrs     selfrate
aoasl              1.000000000 -0.78501877 -0.504229778
signyrs           -0.785018765  1.00000000  0.707270523
selfrate          -0.504229778  0.70727052  1.000000000
gist_reversed     -0.323263833  0.23410877  0.376150518
lex_reversed      -0.257797316  0.24984565  0.357828518
upper_reversed    -0.029121456  0.05225378  0.014765698
lower_reversed     0.080000070 -0.09483062 -0.091817862
left_reversed     -0.114980591  0.12695911  0.245822704
right_reversed    -0.069880383  0.06205640  0.177639216
width_reversed     0.103094745 -0.14764744 -0.157195654
height_reversed    0.220610570 -0.29881825 -0.213945336
x_center_reversed -0.097804099  0.10798841  0.241739152
y_center_reversed -0.004638618  0.02209785 -0.006599445
area_reversed      0.201892375 -0.24148085 -0.179041636
                  gist_reversed lex_reversed upper_reversed
aoasl               -0.32326383  -0.25779732    -0.02912146
signyrs              0.23410877   0.24984565     0.05225378
selfrate             0.37615052   0.35782852     0.01476570
gist_reversed        1.00000000   0.44831458    -0.08009174
lex_reversed         0.44831458   1.00000000     0.14140325
upper_reversed      -0.08009174   0.14140325     1.00000000
lower_reversed      -0.16535317  -0.01946623     0.88218429
left_reversed        0.09016509   0.01160483    -0.08753213
right_reversed      -0.03496294  -0.07538368    -0.26386130
width_reversed      -0.28178791  -0.19495084    -0.39311413
height_reversed     -0.16083704  -0.33627427    -0.34682568
x_center_reversed    0.03978310  -0.01230045    -0.16607710
y_center_reversed   -0.11125724   0.10234025     0.98829936
area_reversed       -0.27645513  -0.33555475    -0.38088456
                  lower_reversed left_reversed right_reversed
aoasl                 0.08000007   -0.11498059    -0.06988038
signyrs              -0.09483062    0.12695911     0.06205640
selfrate             -0.09181786    0.24582270     0.17763922
gist_reversed        -0.16535317    0.09016509    -0.03496294
lex_reversed         -0.01946623    0.01160483    -0.07538368
upper_reversed        0.88218429   -0.08753213    -0.26386130
lower_reversed        1.00000000   -0.21623909    -0.25873458
left_reversed        -0.21623909    1.00000000     0.90108289
right_reversed       -0.25873458    0.90108289     1.00000000
width_reversed       -0.09112289   -0.23997959     0.20473332
height_reversed       0.13571095   -0.24653567     0.03980714
x_center_reversed    -0.23499404    0.97773315     0.95974998
y_center_reversed     0.93523651   -0.11419866    -0.25582980
area_reversed         0.05863852   -0.29277378     0.07789063
                  width_reversed height_reversed
aoasl                 0.10309475      0.22061057
signyrs              -0.14764744     -0.29881825
selfrate             -0.15719565     -0.21394534
gist_reversed        -0.28178791     -0.16083704
lex_reversed         -0.19495084     -0.33627427
upper_reversed       -0.39311413     -0.34682568
lower_reversed       -0.09112289      0.13571095
left_reversed        -0.23997959     -0.24653567
right_reversed        0.20473332      0.03980714
width_reversed        1.00000000      0.64558840
height_reversed       0.64558840      1.00000000
x_center_reversed    -0.05838507     -0.11863818
y_center_reversed    -0.31494344     -0.21654095
area_reversed         0.83521109      0.91814743
                  x_center_reversed y_center_reversed
aoasl                   -0.09780410      -0.004638618
signyrs                  0.10798841       0.022097855
selfrate                 0.24173915      -0.006599445
gist_reversed            0.03978310      -0.111257241
lex_reversed            -0.01230045       0.102340250
upper_reversed          -0.16607710       0.988299358
lower_reversed          -0.23499404       0.935236505
left_reversed            0.97773315      -0.114198661
right_reversed           0.95974998      -0.255829796
width_reversed          -0.05838507      -0.314943438
height_reversed         -0.11863818      -0.216540955
x_center_reversed        1.00000000      -0.175098450
y_center_reversed       -0.17509845       1.000000000
area_reversed           -0.13330268      -0.268571396
                  area_reversed
aoasl                0.20189237
signyrs             -0.24148085
selfrate            -0.17904164
gist_reversed       -0.27645513
lex_reversed        -0.33555475
upper_reversed      -0.38088456
lower_reversed       0.05863852
left_reversed       -0.29277378
right_reversed       0.07789063
width_reversed       0.83521109
height_reversed      0.91814743
x_center_reversed   -0.13330268
y_center_reversed   -0.26857140
area_reversed        1.00000000
[1] "Correlations - P-values"
                         aoasl      signyrs     selfrate
aoasl                       NA 9.197088e-12 1.615663e-04
signyrs           9.197088e-12           NA 6.557450e-09
selfrate          1.615663e-04 6.557450e-09           NA
gist_reversed     2.067647e-02 9.823107e-02 6.521192e-03
lex_reversed      6.778899e-02 7.703055e-02 9.936345e-03
upper_reversed    8.392476e-01 7.157353e-01 9.180903e-01
lower_reversed    5.768124e-01 5.080154e-01 5.216457e-01
left_reversed     4.217212e-01 3.746526e-01 8.207078e-02
right_reversed    6.260668e-01 6.653039e-01 2.123629e-01
width_reversed    4.715785e-01 3.011578e-01 2.706195e-01
height_reversed   1.197907e-01 3.317021e-02 1.316792e-01
x_center_reversed 4.947427e-01 4.506796e-01 8.744839e-02
y_center_reversed 9.742286e-01 8.776754e-01 9.633409e-01
area_reversed     1.553942e-01 8.779760e-02 2.087169e-01
                  gist_reversed lex_reversed upper_reversed
aoasl              0.0206764678 0.0677889947    0.839247623
signyrs            0.0982310702 0.0770305455    0.715735280
selfrate           0.0065211919 0.0099363454    0.918090325
gist_reversed                NA 0.0009694894    0.576374364
lex_reversed       0.0009694894           NA    0.322285977
upper_reversed     0.5763743641 0.3222859767             NA
lower_reversed     0.2462172934 0.8921508964    0.000000000
left_reversed      0.5291998072 0.9355825975    0.541344230
right_reversed     0.8075640417 0.5990619544    0.061353509
width_reversed     0.0451475489 0.1704039043    0.004321717
height_reversed    0.2595352956 0.0158363529    0.012654284
x_center_reversed  0.7816461193 0.9317301547    0.244126400
y_center_reversed  0.4370078971 0.4748461015    0.000000000
area_reversed      0.0495534531 0.0160762000    0.005826220
                  lower_reversed left_reversed right_reversed
aoasl                 0.57681236    0.42172116     0.62606685
signyrs               0.50801540    0.37465263     0.66530394
selfrate              0.52164571    0.08207078     0.21236295
gist_reversed         0.24621729    0.52919981     0.80756404
lex_reversed          0.89215090    0.93558260     0.59906195
upper_reversed        0.00000000    0.54134423     0.06135351
lower_reversed                NA    0.12749190     0.06676057
left_reversed         0.12749190            NA     0.00000000
right_reversed        0.06676057    0.00000000             NA
width_reversed        0.52481555    0.08984879     0.14954024
height_reversed       0.34234309    0.08115912     0.78151742
x_center_reversed     0.09692972    0.00000000     0.00000000
y_center_reversed     0.00000000    0.42490602     0.06998894
area_reversed         0.68273549    0.03707699     0.58693238
                  width_reversed height_reversed
aoasl               4.715785e-01    1.197907e-01
signyrs             3.011578e-01    3.317021e-02
selfrate            2.706195e-01    1.316792e-01
gist_reversed       4.514755e-02    2.595353e-01
lex_reversed        1.704039e-01    1.583635e-02
upper_reversed      4.321717e-03    1.265428e-02
lower_reversed      5.248155e-01    3.423431e-01
left_reversed       8.984879e-02    8.115912e-02
right_reversed      1.495402e-01    7.815174e-01
width_reversed                NA    3.135205e-07
height_reversed     3.135205e-07              NA
x_center_reversed   6.840348e-01    4.070048e-01
y_center_reversed   2.438493e-02    1.269484e-01
area_reversed       2.531308e-14    0.000000e+00
                  x_center_reversed y_center_reversed
aoasl                    0.49474269        0.97422861
signyrs                  0.45067958        0.87767544
selfrate                 0.08744839        0.96334091
gist_reversed            0.78164612        0.43700790
lex_reversed             0.93173015        0.47484610
upper_reversed           0.24412640        0.00000000
lower_reversed           0.09692972        0.00000000
left_reversed            0.00000000        0.42490602
right_reversed           0.00000000        0.06998894
width_reversed           0.68403479        0.02438493
height_reversed          0.40700481        0.12694840
x_center_reversed                NA        0.21908160
y_center_reversed        0.21908160                NA
area_reversed            0.35105650        0.05670101
                  area_reversed
aoasl              1.553942e-01
signyrs            8.779760e-02
selfrate           2.087169e-01
gist_reversed      4.955345e-02
lex_reversed       1.607620e-02
upper_reversed     5.826220e-03
lower_reversed     6.827355e-01
left_reversed      3.707699e-02
right_reversed     5.869324e-01
width_reversed     2.531308e-14
height_reversed    0.000000e+00
x_center_reversed  3.510565e-01
y_center_reversed  5.670101e-02
area_reversed                NA
LS0tCnRpdGxlOiAiVGhlIExhc3QgRGF0YSBBbmFseXNpcyB0byBSdWxlIFRoZW0gQWxsPyAoc3R1ZHkxYWR1bHRzKSIKYXV0aG9yOiAiQWRhbSBTdG9uZSwgUGhEIgpkYXRlOiAnYHIgZm9ybWF0KFN5cy5EYXRlKCksICIlbS0lZC0lWSIpYCcKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIHRoZW1lOiBwYXBlcgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMgogICAgdG9jX2Zsb2F0OiB5ZXMKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UpCmBgYAoKIyBQdXR0aW5nIEl0IEFsbCBCYWNrIFRvZ2V0aGVyCgpUaHJvdWdob3V0IGFsbCB0aGUgZGF0YSBhbmFseXNpcyB3ZSd2ZSBkb25lLCB0aGUgZGF0YXNldHMgaGF2ZSBiZWNvbWUgbW9yZSBmcmFnbWVudGVkIC0gbGV4aWNhbCByZWNhbGwsIGdpc3QsIGFuZCBleWUgdHJhY2tpbmcgZGF0YXNldHMuIEkgd2FudCB0byBwdXQgdGhlbSBhbGwgdG9nZXRoZXIgaW4gb25lIHdob2xlIGRhdGFzZXQgYWdhaW4gc28gd2UgY2FuIHBlcmZvcm0gc29tZSBhbmFseXNlcyBtb3JlIGVmZmljaWVudGx5IChwYXJ0aWN1bGFybHkgY29ycmVsYXRpb25zKS4gVGhlIG9ubHkgdGhpbmcgSSBuZWVkIHRvIHJlbWVtYmVyIGlzIHdlJ2xsIGhhdmUgYSBuZXcgY29sdW1uIGNhbGxlZCBgZXllX2V4Y2x1ZGVgIGFuZCBpZiBpdCBpcyBzZXQgdG8gYFRSVUVgIGl0IG1lYW5zIHdlIGNhbid0IGluY2x1ZGUgdGhhdCByb3cgaW4gYW55IGFuYWx5c2lzIHJlbGF0aW5nIHRvIGV5ZSBnYXplICh1c3VhbGx5IGJlY2F1c2UgdGhhdCB0cmlhbCB3YXMgbGVzcyB0aGFuIDI1JSBsb29raW5nKS4gCgpgYGB7ciBzbWFzaCBkYXRhIHRvZ2V0aGVyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIExpYnJhcmllcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KGFncmljb2xhZSkgCmxpYnJhcnkoR0dhbGx5KQpsaWJyYXJ5KGV6KQoKIyBMb2FkIGxleCBhbmQgZXllIGRhdGEKY2xlYW5sZXhkYXRhIDwtIHJlYWRfY3N2KCJjbGVhbmRhdGEuY3N2IikgJT4lCiAgc2VsZWN0KC0oZm9yZWhlYWQ6dG90YWwpKQoKY2xlYW5leWVkYXRhIDwtIHJlYWRfY3N2KCJjbGVhbnBlcmNlbnRkYXRhLmNzdiIpICU+JQogIHNwcmVhZChhb2kscGVyY2VudCkgJT4lCiAgYWRkX2NvbHVtbihleWVfZXhjbHVkZSA9IEZBTFNFKQoKIyBXaGF0IHJvd3Mgd2VyZSByZW1vdmVkIGZyb20gdGhlIGV5ZSBkYXRhIGJhY2sgaW4gMDNleWVnYXplPyBMZXQncyBhZGQgYmFjayBpbgojIFdpdGggYSBuZXcgY29sdW1uIC0gZXllX2V4Y2x1ZGUKcmVtb3ZlZCA8LSBhbnRpX2pvaW4oY2xlYW5sZXhkYXRhLCBjbGVhbmV5ZWRhdGEpICU+JQogIGFkZF9jb2x1bW4oZXllX2V4Y2x1ZGUgPSBUUlVFKQpleWVsZXhkYXRhIDwtIGJpbmRfcm93cyhjbGVhbmV5ZWRhdGEsIHJlbW92ZWQpCgojIExvYWQgZ2lzdCBkYXRhCmdpc3QgPC0gcmVhZF9jc3YoJ2dpc3RfaW5kaXYuY3N2JywgY29sX3R5cGVzID0gY29scygKICBwYXJ0aWNpcGFudCA9IGNvbF9jaGFyYWN0ZXIoKSwKICBnaXN0LmZ3MSA9IGNvbF9pbnRlZ2VyKCksCiAgZ2lzdC5ydjIgPSBjb2xfaW50ZWdlcigpLAogIGdpc3QuZnczID0gY29sX2ludGVnZXIoKSwKICBnaXN0LnJ2NCA9IGNvbF9pbnRlZ2VyKCkKKSkgJT4lCiAgZ2F0aGVyKHZpZGVvLCBnaXN0LCBnaXN0LmZ3MTpnaXN0LnJ2NCkgJT4lCiAgbXV0YXRlKHZpZGVvID0gc3RyX3N1Yih2aWRlbyw2LDgpKQoKIyBQcmVzdG8sIG91ciBmdWxsIHJldW5pZmllZCBkYXRhc2V0IC0gJ2Z1bGxkYXRhJwojIEJ1dCBJIHdhbnQgdG8gcmVtb3ZlIGNvbHVtbnMgSSBkb24ndCB3YW50IGFueW1vcmUgYW5kIHdpbGwgcmVjYWxjdWxhdGUgbGF0ZXIKZnVsbGRhdGEgPC0gbGVmdF9qb2luKGV5ZWxleGRhdGEsIGdpc3QpICU+JQogIHNlbGVjdCgtbW91dGhleWUsIC1mYWNlY2hlc3QsIC1mYWNlLCAtY2hlc3QpCmBgYAoKIyBHcm91cCBDaGFuZ2VzIGFuZCBQYXJ0aWNpcGFudCBUYWJsZXMKCldlIGhhdmUgc29tZSBjaGFuZ2VzIHRvIG1ha2UgdG8gdGhlIGdyb3Vwcy4gRmlyc3QsIGZpeCBKb3NoIGFzIGxlYXJuaW5nIEFTTCB3aGVuIGhlIHdhcyA2LiBOZXh0LCBkcm9wIHRoZSBEZWFmTmF0aXZlIEdyb3VwIGFuZCByZWNsYXNzaWZ5IGFsbCB3aG8gbGVhcm5lZCBBU0wgPCAzLjkgYXMgRGVhZkVhcmx5IGFuZCBBU0wgPT4gNC4wIGFzIERlYWZMYXRlLiAKCmBgYHtyIGdyb3VwcyBhbmQgcGFydGljaXBhbnQgdGFibGVzfQojIENoYW5nZSBKb3NoJ3MgQW9BU0wgdG8gNgpmdWxsZGF0YSA8LSBmdWxsZGF0YSAlPiUKICBtdXRhdGUoYW9hc2wgPSBhcy5kb3VibGUoYW9hc2wpKSAlPiUKICBtdXRhdGUoYW9hc2wgPSBjYXNlX3doZW4oCiAgICBwYXJ0aWNpcGFudCA9PSAiSm9zaCIgfiA2LAogICAgVFJVRSB+IGFvYXNsCiAgKSkKCiMgUmVjbGFzc2lmeSBHcm91cHMKZnVsbGRhdGEgPC0gZnVsbGRhdGEgJT4lCiAgbXV0YXRlKG1haW5ncm91cCA9IGNhc2Vfd2hlbigKICAgIGhlYXJpbmcgPT0gIkRlYWYiICYgYW9hc2wgPCA0IH4gIkRlYWZFYXJseSIsCiAgICBoZWFyaW5nID09ICJEZWFmIiAmIGFvYXNsID49IDQgfiAiRGVhZkxhdGUiLAogICAgbWFpbmdyb3VwID09ICJIZWFyaW5nTGF0ZUFTTCIgfiAiSGVhcmluZ0xhdGUiLAogICAgbWFpbmdyb3VwID09ICJIZWFyaW5nTm92aWNlQVNMIiB+ICJIZWFyaW5nTm92aWNlIgogICkpCgojIENyZWF0ZSBQYXJ0aWNpcGFudCBEZW1vZ3JhcGhpY3MgVGFibGUKcGFydGljaXBhbnRfaW5mbyA8LSBmdWxsZGF0YSAlPiUKICBzZWxlY3QoLShhY2M6Z2lzdCkpICU+JQogIHNlbGVjdCgtKHZpZGVvOmRpcmVjdGlvbikpICU+JQogIGRpc3RpbmN0KCkgJT4lIAogIGdyb3VwX2J5KG1haW5ncm91cCkgJT4lCiAgc3VtbWFyaXNlKG4gPSBuKCksCiAgICAgICAgICAgIGFnZV9tZWFuID0gbWVhbihhZ2UpLAogICAgICAgICAgICBhZ2Vfc2QgPSBzZChhZ2UpLAogICAgICAgICAgICBhZ2VfbWF4ID0gbWF4KGFnZSksCiAgICAgICAgICAgIGFnZV9taW4gPSBtaW4oYWdlKSwKICAgICAgICAgICAgYW9hc2xfbWVhbiA9IG1lYW4oYW9hc2wpLAogICAgICAgICAgICBhb2FzbF9zZCA9IHNkKGFvYXNsKSwKICAgICAgICAgICAgYW9hc2xfbWF4ID0gbWF4KGFvYXNsKSwKICAgICAgICAgICAgYW9hc2xfbWluID0gbWluKGFvYXNsKSwKICAgICAgICAgICAgc2lnbnlyc19tZWFuID0gbWVhbihzaWdueXJzKSwKICAgICAgICAgICAgc2lnbnlyc19zZCA9IHNkKHNpZ255cnMpLAogICAgICAgICAgICBzaWdueXJzX21heCA9IG1heChzaWdueXJzKSwKICAgICAgICAgICAgc2lnbnlyc19taW4gPSBtaW4oc2lnbnlycyksCiAgICAgICAgICAgIHNlbGZyYXRlX21lYW4gPSBtZWFuKHNlbGZyYXRlKSwKICAgICAgICAgICAgc2VsZnJhdGVfc2QgPSBzZChzZWxmcmF0ZSksCiAgICAgICAgICAgIHNlbGZyYXRlX21heCA9IG1heChzZWxmcmF0ZSksCiAgICAgICAgICAgIHNlbGZyYXRlX21pbiA9IG1pbihzZWxmcmF0ZSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGVfaWYoaXMuZG91YmxlLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKGFnZSA9IHBhc3RlKGFnZV9tZWFuLCAiwrEiLCBhZ2Vfc2QsIHNlcCA9ICIgIiksCiAgICAgICAgIGFvYXNsID0gcGFzdGUoYW9hc2xfbWVhbiwgIsKxIiwgYW9hc2xfc2QsIHNlcCA9ICIgIiksCiAgICAgICAgIHNpZ255cnMgPSBwYXN0ZShzaWdueXJzX21lYW4sICLCsSIsIHNpZ255cnNfc2QsIHNlcCA9ICIgIiksCiAgICAgICAgIHNlbGZyYXRlID0gcGFzdGUoc2VsZnJhdGVfbWVhbiwgIsKxIiwgc2VsZnJhdGVfc2QsIHNlcCA9ICIgIiksCiAgICAgICAgIGFnZV9yYW5nZSA9IHBhc3RlKGFnZV9taW4sIGFnZV9tYXgsIHNlcCA9ICItIiksCiAgICAgICAgIGFvYXNsX3JhbmdlID0gcGFzdGUoYW9hc2xfbWluLCBhb2FzbF9tYXgsIHNlcCA9ICItIiksCiAgICAgICAgIHNpZ255cnNfcmFuZ2UgPSBwYXN0ZShzaWdueXJzX21pbiwgc2lnbnlyc19tYXgsIHNlcCA9ICItIiksCiAgICAgICAgIHNlbGZyYXRlX3JhbmdlID0gcGFzdGUoc2VsZnJhdGVfbWluLCBzZWxmcmF0ZV9tYXgsIHNlcCA9ICItIikpICU+JQogIHNlbGVjdCgtKGFnZV9tZWFuOnNlbGZyYXRlX3NkKSkgJT4lCiAgc2VsZWN0KC1jKHNlbGZyYXRlX21heCwgc2VsZnJhdGVfbWluKSkKCnBhcnRpY2lwYW50X2luZm8Kd3JpdGVfY3N2KGZ1bGxkYXRhLCAiZmluYWxkYXRhc2V0LmNzdiIpCgpkYXRhX2xvd2FvaSA8LSBmdWxsZGF0YSAlPiUgc2VsZWN0KHBhcnRpY2lwYW50LCBzdG9yeSwgYmVsbHk6dXBwZXJjaGVzdCkgJT4lIHNlbGVjdCgtZXllcywgLW1vdXRoLCAtY2hpbikgJT4lIGdhdGhlcihhb2ksIHBlcmNlbnQsIGJlbGx5OnVwcGVyY2hlc3QpCmRhdGFfbG93YW9pJHBlcmNlbnRbaXMubmEoZGF0YV9sb3dhb2kkcGVyY2VudCldIDwtIDAKbWVhbihkYXRhX2xvd2FvaSRwZXJjZW50LCBuYS5ybT1UUlVFKQpzZChkYXRhX2xvd2FvaSRwZXJjZW50LCBuYS5ybT1UUlVFKQpgYGAKIyMgUGFydGljaXBhbnQgQU5PVkFzIAoKQmVsb3cgYXJlIHRoZSBBTk9WQSBvdXRwdXRzIGZvciBwYXJ0aWNpcGFudCBkZW1vZ3JhcGhpY3MsIGFuZCBMU0RzIGZvciBlYWNoLiAKClBhcnRpY2lwYW50cycgYWdlCmBgYHtyIHN1YmplY3QgYW5vdmEgYWdlLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIE1ha2UgdGhlIHBhcnRpY2lwYW50IGRhdGEgZnJhbWUKcF9hbm92YXMgPC0gZnVsbGRhdGEgJT4lCiAgc2VsZWN0KC0oYWNjOmdpc3QpKSAlPiUKICBzZWxlY3QoLSh2aWRlbzpkaXJlY3Rpb24pKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNlbGVjdChtYWluZ3JvdXA6YW9hc2wpCgojIEFnZSBBTk9WQQpwX2FnZSA8LSBhb3YoYWdlIH4gbWFpbmdyb3VwLCBkYXRhID0gcF9hbm92YXMpCnN1bW1hcnkocF9hZ2UpCnBfYWdlX2xzZCA8LSBMU0QudGVzdChwX2FnZSwgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpJGNvbXBhcmlzb24KcF9hZ2VfbHNkCmBgYAoKClBhcnRpY2lwYW50cycgQW9BU0wKYGBge3Igc3ViamVjdCBhbm92YSBhb2FzbCwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBBb0FTTCBBTk9WQQpwX2FvYXNsIDwtIGFvdihhb2FzbCB+IG1haW5ncm91cCwgZGF0YSA9IHBfYW5vdmFzKQpzdW1tYXJ5KHBfYW9hc2wpCnBfYW9hc2xfbHNkIDwtIExTRC50ZXN0KHBfYW9hc2wsICJtYWluZ3JvdXAiLCBncm91cCA9IEZBTFNFKSRjb21wYXJpc29uCnBfYW9hc2xfbHNkCmBgYAoKUGFydGljaXBhbnRzJyBTaWduIFlycwpgYGB7ciBzdWJqZWN0IGFub3ZhIHNpZ255cnMsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgU2lnbnlycyBBTk9WQQpwX3NpZ255cnMgPC0gYW92KHNpZ255cnMgfiBtYWluZ3JvdXAsIGRhdGEgPSBwX2Fub3ZhcykKc3VtbWFyeShwX3NpZ255cnMpCnBfc2lnbnlyc19sc2QgPC0gTFNELnRlc3QocF9zaWdueXJzLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkkY29tcGFyaXNvbgpwX3NpZ255cnNfbHNkCmBgYAoKUGFydGljaXBhbnRzJyBTZWxmLVJhdGluZwpgYGB7ciBzdWJqZWN0IGFub3ZhIHNlbGZyYXRlLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIFNlbGZyYXRlIEFOT1ZBCnBfc2VsZnJhdGUgPC0gYW92KHNlbGZyYXRlIH4gbWFpbmdyb3VwLCBkYXRhID0gcF9hbm92YXMpCnN1bW1hcnkocF9zZWxmcmF0ZSkKcF9zZWxmcmF0ZV9sc2QgPC0gTFNELnRlc3QocF9zZWxmcmF0ZSwgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpJGNvbXBhcmlzb24KcF9zZWxmcmF0ZV9sc2QKYGBgCgojIEdpc3QgJiBMZXhpY2FsIFJlY2FsbCBEYXRhCgojIyBUYWJsZXMgJiBDaGFydHMKCkxldCdzIGdlbmVyYXRlIGEgdGFibGUgZm9yIGxleGljYWwgcmVjYWxsIGFuZCBnaXN0IGZvciBmb3J3YXJkIHZzLiByZXZlcnNlZCBzdG9yaWVzLiAKCmBgYHtyIGxleCAmIGdpc3QgdGFibGV9CmxleGdpc3RfaW5mbyA8LSBmdWxsZGF0YSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIGRpcmVjdGlvbikgJT4lCiAgc3VtbWFyaXNlKGxleF9tZWFuID0gbWVhbihhY2MsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIGxleF9zZCA9IHNkKGFjYywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgZ2lzdF9tZWFuID0gbWVhbihnaXN0KSwKICAgICAgICAgICAgZ2lzdF9zZCA9IHNkKGdpc3QpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlX2lmKGlzLmRvdWJsZSwgZnVucyhyb3VuZCguLCAyKSkpICU+JSAKICBtdXRhdGUobGV4ID0gcGFzdGUobGV4X21lYW4sICLCsSIsIGxleF9zZCwgc2VwID0gIiAiKSwKICAgICAgICAgZ2lzdCA9IHBhc3RlKGdpc3RfbWVhbiwgIsKxIiwgZ2lzdF9zZCwgc2VwID0gIiAiKSkgJT4lCiAgc2VsZWN0KC0obGV4X21lYW46Z2lzdF9zZCkpICU+JQogIGdhdGhlcihtZXRyaWMsIHZhbHVlLCBsZXg6Z2lzdCkgJT4lCiAgdW5pdGUoIm1ldHJpYyIsIGMobWV0cmljLCBkaXJlY3Rpb24pLCBzZXAgPSAiXyIpICU+JQogIHNwcmVhZChtZXRyaWMsIHZhbHVlKSAlPiUKICBwcmludCgpCgpsZXhnaXN0X2luZm8gPC0gZnVsbGRhdGEgJT4lCiAgZ3JvdXBfYnkobWFpbmdyb3VwKSAlPiUKICBzdW1tYXJpc2UobGV4X21lYW4gPSBtZWFuKGFjYywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbGV4X3NkID0gc2QoYWNjLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICBnaXN0X21lYW4gPSBtZWFuKGdpc3QpLAogICAgICAgICAgICBnaXN0X3NkID0gc2QoZ2lzdCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGVfaWYoaXMuZG91YmxlLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lIAogIG11dGF0ZShsZXggPSBwYXN0ZShsZXhfbWVhbiwgIsKxIiwgbGV4X3NkLCBzZXAgPSAiICIpLAogICAgICAgICBnaXN0ID0gcGFzdGUoZ2lzdF9tZWFuLCAiwrEiLCBnaXN0X3NkLCBzZXAgPSAiICIpKSAlPiUKICBzZWxlY3QoLShsZXhfbWVhbjpnaXN0X3NkKSkgJT4lCiAgZ2F0aGVyKG1ldHJpYywgdmFsdWUsIGxleDpnaXN0KSAlPiUKIyAgdW5pdGUoIm1ldHJpYyIsIGMobWV0cmljLCBkaXJlY3Rpb24pLCBzZXAgPSAiXyIpICU+JQogIHNwcmVhZChtZXRyaWMsIHZhbHVlKSAlPiUKICBwcmludCgpCmBgYAoKQW5kIHRoZW4gYmFyIGNoYXJ0cyB0b28gYWZ0ZXIgdGhhdCB3aXRoIGVycm9yIGJhcnMuIAoKYGBge3IgbGV4IGFuZCBnaXN0IGJhciBjaGFydHN9CiMgR2lzdCBiYXIgY2hhcnQKZ2lzdF9iYXIgPC0gZnVsbGRhdGEgJT4lIHNlbGVjdChwYXJ0aWNpcGFudCwgbWFpbmdyb3VwLCBkaXJlY3Rpb24sIGdpc3QpICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCwgcGFydGljaXBhbnQsIGRpcmVjdGlvbikgJT4lCiAgc3VtbWFyaXNlKGdpc3QgPSBtZWFuKGdpc3QpKSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIGRpcmVjdGlvbikgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKGdpc3QpLAogICAgICAgICAgICBzZCA9IHNkKGdpc3QpLAogICAgICAgICAgICBjb3VudCA9IG4oKSwKICAgICAgICAgICAgc2UgPSBzZC9zcXJ0KGNvdW50KSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShtYWluZ3JvdXAgPSBjYXNlX3doZW4oCiAgICBtYWluZ3JvdXAgPT0gIkRlYWZFYXJseSIgfiAiRGVhZiBFYXJseSIsCiAgICBtYWluZ3JvdXAgPT0gIkRlYWZMYXRlIiB+ICJEZWFmIExhdGUiLAogICAgbWFpbmdyb3VwID09ICJIZWFyaW5nTGF0ZSIgfiAiSGVhcmluZyBMYXRlIiwKICAgIG1haW5ncm91cCA9PSAiSGVhcmluZ05vdmljZSIgfiAiSGVhcmluZyBOb3ZpY2UiCiAgICApKQoKZ2dwbG90KGdpc3RfYmFyLCBhZXMoeCA9IG1haW5ncm91cCwgeSA9IG1lYW4sIGZpbGwgPSBkaXJlY3Rpb24pKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKyAKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhbi1zZSwgeW1heCA9IG1lYW4rc2UpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSksIHdpZHRoID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJHaXN0IiwgeCA9ICIiLCB5ID0gIm1lYW4gZ2lzdCBhY2N1cmFjeSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudCwgbGltaXRzID0gYygwLDEpKSArIHRoZW1lX2J3KCkKCiMgTGV4IGJhciBjaGFydApsZXhfYmFyIDwtIGZ1bGxkYXRhICU+JSBzZWxlY3QocGFydGljaXBhbnQsIG1haW5ncm91cCwgZGlyZWN0aW9uLCBhY2MpICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCwgcGFydGljaXBhbnQsIGRpcmVjdGlvbikgJT4lCiAgc3VtbWFyaXNlKGFjYyA9IG1lYW4oYWNjLCBuYS5ybSA9IFRSVUUpKSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIGRpcmVjdGlvbikgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKGFjYywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgc2QgPSBzZChhY2MsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIGNvdW50ID0gbigpLAogICAgICAgICAgICBzZSA9IHNkL3NxcnQoY291bnQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKG1haW5ncm91cCA9IGNhc2Vfd2hlbigKICAgIG1haW5ncm91cCA9PSAiRGVhZkVhcmx5IiB+ICJEZWFmIEVhcmx5IiwKICAgIG1haW5ncm91cCA9PSAiRGVhZkxhdGUiIH4gIkRlYWYgTGF0ZSIsCiAgICBtYWluZ3JvdXAgPT0gIkhlYXJpbmdMYXRlIiB+ICJIZWFyaW5nIExhdGUiLAogICAgbWFpbmdyb3VwID09ICJIZWFyaW5nTm92aWNlIiB+ICJIZWFyaW5nIE5vdmljZSIKICAgICkpCgpnZ3Bsb3QobGV4X2JhciwgYWVzKHggPSBtYWluZ3JvdXAsIHkgPSBtZWFuLCBmaWxsID0gZGlyZWN0aW9uKSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsgCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG1lYW4tc2UsIHltYXggPSBtZWFuK3NlKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpLCB3aWR0aCA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiTGV4aWNhbCBSZWNhbGwiLCB4ID0gIiIsIHkgPSAibWVhbiBsZXhpY2FsIHJlY2FsbCBhY2N1cmFjeSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudCwgbGltaXRzID0gYygwLDEpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLjUsIGxpbmV0eXBlID0gImRvdHRlZCIpICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoLjUsMSkpICsgdGhlbWVfYncoKQpgYGAKCkFuZCBsZXQncyBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgcmVkdWN0aW9uIGluIHNjb3JlIGR1ZSB0byByZXZlcnNhbCBmaXJzdCBpcyBsZXggcmVjYWxsLCB0aGVuIGdpc3QuCgpgYGB7cn0KcmV2ZXJzYWxfbGV4IDwtIGZ1bGxkYXRhICU+JQogIGdyb3VwX2J5KGlkLCBkaXJlY3Rpb24pICU+JQogIHN1bW1hcmlzZShsZXhfbWVhbiA9IG1lYW4oYWNjLCBuYS5ybSA9IFRSVUUpKSAlPiUKICBzcHJlYWQoZGlyZWN0aW9uLCBsZXhfbWVhbikgJT4lCiAgZ3JvdXBfYnkoaWQpICU+JQogIG11dGF0ZShyZXZlcnNhbCA9IGZvcndhcmQgLSByZXZlcnNlZCkgJT4lCiAgdW5ncm91cCgpCgpwYXN0ZSgibGV4IG1lYW4iLCBtZWFuKHJldmVyc2FsX2xleCRyZXZlcnNhbCkpCnBhc3RlKCJsZXggc2QiLCBzZChyZXZlcnNhbF9sZXgkcmV2ZXJzYWwpKQoKcmV2ZXJzYWxfZ2lzdCA8LSBmdWxsZGF0YSAlPiUKICBncm91cF9ieShpZCwgZGlyZWN0aW9uKSAlPiUKICBzdW1tYXJpc2UoZ2lzdF9tZWFuID0gbWVhbihnaXN0LCBuYS5ybSA9IFRSVUUpKSAlPiUKICBzcHJlYWQoZGlyZWN0aW9uLCBnaXN0X21lYW4pICU+JQogIGdyb3VwX2J5KGlkKSAlPiUKICBtdXRhdGUocmV2ZXJzYWwgPSBmb3J3YXJkIC0gcmV2ZXJzZWQpICU+JQogIHVuZ3JvdXAoKQoKcGFzdGUoImdpc3QgbWVhbiIsIG1lYW4ocmV2ZXJzYWxfZ2lzdCRyZXZlcnNhbCkpCnBhc3RlKCJnaXN0IHNkIiwgc2QocmV2ZXJzYWxfZ2lzdCRyZXZlcnNhbCkpCgoKYGBgCgoKIyMgQU5PVkEgUGxhbgpOZXh0LCB3ZSdyZSBnb2luZyB0byBkbyBBTk9WQXMuIFdlJ2xsIGFsd2F5cyBkbyBpdCBpbiB0aGlzIG9yZGVyLgoKMS4gQU5PVkEgd2l0aCBmYWN0b3JzIE1haW5Hcm91cCAmIERpcmVjdGlvbgoyLiBBTk9WQSB3aXRoIGZhY3RvciBNYWluR3JvdXAsIGZvciBGb3J3YXJkIG9ubHkKMy4gQU5PVkEgd2l0aCBmYWN0b3IgTWFpbkdyb3VwLCBmb3IgUmV2ZXJzZSBvbmx5IAoKKEkgYWxzbyByYW4gQU5DT1ZBcyBiZWZvcmUgYnV0IG5vdyBoYXZlIHRha2VuIHRoZW0gb3V0Li4udGhleSBhcmUgYmVsb3c6ICg0KSBBTkNPVkEgd2l0aCBmYWN0b3IgRGlyZWN0aW9uLCBhbmQgY292YXJpYXRlIEFvQVNMIGFuZCBBZ2UsICg1KSBSZWdyZXNzaW9uIHdpdGggdmFyaWFibGVzIEFvQVNMIGFuZCBBZ2UsIGZvciBGb3J3YXJkIG9ubHksICg2KSBSZWdyZXNzaW9uIHdpdGggdmFyaWFibGVzIEFvQVNMIGFuZCBBZ2UsIGZvciBSZXZlcnNlIG9ubHkuKSAKCkkgZGlkIG5vdCBpbmNsdWRlIEFnZSBhcyBhIGNvdmFyaWF0ZSBpbiB0aGUgZmlyc3QgMyBBTk9WQXMgYmVjYXVzZSB0aGV5IGRpZCBub3QgYWRkIHRvIG9yIGNoYW5nZSB0aGUgbW9kZWwgaW4gYW55IHNpZ25pZmljYW50IHdheS4gCgojIyBHaXN0IEFOT1ZBcwoKMS4gQU5PVkEgd2l0aCBmYWN0b3JzIE1haW5Hcm91cCAmIERpcmVjdGlvbi4KCmBgYHtyIGdpc3QgYW5vdmExLCBlY2hvPVRSVUUsIHJlc3VsdHMgPSAnbWFya3VwJ30KIyBGaXJzdCBsZXQncyBtYWtlIHRoZSBwYXJ0aWNpcGFudC1sZXZlbCBkYXRhc2V0IHdpdGggd2hpY2ggd2UnbGwgZG8gb3VyIEFOQ09WQXMuIApwYXJ0aWNpcGFudF9kYXRhIDwtIGZ1bGxkYXRhICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCwgcGFydGljaXBhbnQsIGRpcmVjdGlvbikgJT4lCiAgbXV0YXRlKGdpc3QgPSBtZWFuKGdpc3QsIG5hLnJtID0gVFJVRSksCiAgICAgICAgIGFjYyA9IG1lYW4oYWNjLCBuYS5ybSA9IFRSVUUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KGlkLCBwYXJ0aWNpcGFudCwgaGVhcmluZywgbWFpbmdyb3VwLCBkaXJlY3Rpb24sIGFnZSwgYW9hc2wsIGFjYywgZ2lzdCkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoaWQgPSBmYWN0b3IoaWQpLAogICAgICAgICBwYXJ0aWNpcGFudCA9IGZhY3RvcihwYXJ0aWNpcGFudCksCiAgICAgICAgIGhlYXJpbmcgPSBmYWN0b3IoaGVhcmluZyksCiAgICAgICAgIG1haW5ncm91cCA9IGZhY3RvcihtYWluZ3JvdXApLAogICAgICAgICBkaXJlY3Rpb24gPSBmYWN0b3IoZGlyZWN0aW9uKSkKCiMgIyBHaXN0IEFOT1ZBIDEKIyBnaXN0X2FvdjEgPC0gYW92KGdpc3QgfiBtYWluZ3JvdXAgKiBkaXJlY3Rpb24sIGRhdGEgPSBwYXJ0aWNpcGFudF9kYXRhKQojIHN1bW1hcnkoZ2lzdF9hb3YxKQojIGdpc3RfbHNkMSA8LSBMU0QudGVzdChnaXN0X2FvdjEsICJtYWluZ3JvdXAiLCBncm91cCA9IEZBTFNFKQojIGdpc3RfbHNkMSRjb21wYXJpc29uCgojIEdpc3QgRVogQU5PVkEKZXpBTk9WQSgKICBkYXRhID0gcGFydGljaXBhbnRfZGF0YSwKICBkdiA9IGdpc3QsCiAgd2lkID0gaWQsCiAgd2l0aGluID0gZGlyZWN0aW9uLAogIGJldHdlZW4gPSBtYWluZ3JvdXAsCiAgdHlwZSA9IDMKKVsiQU5PVkEiXQpgYGAKCjIuIEFOT1ZBIHdpdGggZmFjdG9yIE1haW5Hcm91cCwgZm9yIEZvcndhcmQgb25seS4gKkluIHRoZSBjb2RlIGlzIGEgS3J1c2thbC1XYWxsaXMgdGVzdC4gQW5kIENoaS1TcSB0b28uKgoKYGBge3IgZ2lzdCBhbm92YTIsIGVjaG89VFJVRSwgcmVzdWx0cz0gJ21hcmt1cCd9CiMgIyBHaXN0IEFOT1ZBIDIKIyBnaXN0X2FvdjIgPC0gYW92KGdpc3QgfiBtYWluZ3JvdXAsIGRhdGEgPSBmaWx0ZXIocGFydGljaXBhbnRfZGF0YSwgZGlyZWN0aW9uID09ICJmb3J3YXJkIikpCiMgc3VtbWFyeShnaXN0X2FvdjIpCiMgZ2lzdF9sc2QyIDwtIExTRC50ZXN0KGdpc3RfYW92MiwgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpCiMgZ2lzdF9sc2QyJGNvbXBhcmlzb24KCmV6QU5PVkEoCiAgZGF0YSA9IGZpbHRlcihwYXJ0aWNpcGFudF9kYXRhLCBkaXJlY3Rpb24gPT0gImZvcndhcmQiKSwKICBkdiA9IGdpc3QsCiAgd2lkID0gaWQsCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCgojICMgS1cgTm9uLXBhcmFtZXRyaWMgdGVzdCAobGlrZSBvbmUtd2F5IEFOT1ZBKQojIGtydXNrYWwudGVzdChnaXN0IH4gbWFpbmdyb3VwLCBkYXRhID0gYXMubWF0cml4KGZpbHRlcihwYXJ0aWNpcGFudF9kYXRhLCBkaXJlY3Rpb24gPT0gImZvcndhcmQiKSkpCiMgCiMgIyBDaGkgU3EKIyBnaXN0X2NoaXNxX2Z3IDwtIHBhcnRpY2lwYW50X2RhdGEgJT4lCiMgICB1bmdyb3VwKCkgJT4lCiMgICBmaWx0ZXIoZGlyZWN0aW9uID09ICJmb3J3YXJkIikgJT4lCiMgICBzZWxlY3QobWFpbmdyb3VwLCBnaXN0KSAlPiUKIyAgIGdyb3VwX2J5KG1haW5ncm91cCwgZ2lzdCkgJT4lCiMgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQojICAgc3ByZWFkKGdpc3QsIGNvdW50KSAlPiUKIyAgIHJlbmFtZShub25lID0gIjAiLAojICAgICAgICAgIG9uZSA9ICIwLjUiLAojICAgICAgICAgIGJvdGggPSAiMSIpCiMgCiMgZ2lzdF9jaGlzcV9md1tpcy5uYShnaXN0X2NoaXNxX2Z3KV0gPC0gMEwKIyBnaXN0X2NoaXNxX2Z3IDwtIGNiaW5kKGdpc3RfY2hpc3FfZndbLCJub25lIl0sIGdpc3RfY2hpc3FfZndbLCJvbmUiXSwgZ2lzdF9jaGlzcV9md1ssImJvdGgiXSkKIyBjaGlzcS50ZXN0KGdpc3RfY2hpc3FfZncpCmBgYAoKMy4gQU5PVkEgd2l0aCBmYWN0b3IgTWFpbkdyb3VwLCBmb3IgUmV2ZXJzZSBvbmx5LiAqSW4gdGhlIGNvZGUgaXMgYSBLcnVza2FsLVdhbGxpcyB0ZXN0LiBBbmQgQ2hpLVNxIHRvby4qCgpgYGB7ciBnaXN0IGFub3ZhMywgZWNobz1UUlVFLCByZXN1bHRzID0gJ21hcmt1cCd9CiMgIyBHaXN0IEFOT1ZBIDMKIyBnaXN0X2FvdjMgPC0gYW92KGdpc3QgfiBtYWluZ3JvdXAsIGRhdGEgPSBmaWx0ZXIocGFydGljaXBhbnRfZGF0YSwgZGlyZWN0aW9uID09ICJyZXZlcnNlZCIpKQojIHN1bW1hcnkoZ2lzdF9hb3YzKQojIGdpc3RfbHNkMyA8LSBMU0QudGVzdChnaXN0X2FvdjMsICJtYWluZ3JvdXAiLCBncm91cCA9IEZBTFNFKQojIGdpc3RfbHNkMyRjb21wYXJpc29uIAoKZXpBTk9WQSgKICBkYXRhID0gZmlsdGVyKHBhcnRpY2lwYW50X2RhdGEsIGRpcmVjdGlvbiA9PSAicmV2ZXJzZWQiKSwKICBkdiA9IGdpc3QsCiAgd2lkID0gaWQsCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCgojICMgS1cgTm9uLXBhcmFtZXRyaWMgdGVzdCAobGlrZSBvbmUtd2F5IEFOT1ZBKQojIGtydXNrYWwudGVzdChnaXN0IH4gbWFpbmdyb3VwLCBkYXRhID0gYXMubWF0cml4KGZpbHRlcihwYXJ0aWNpcGFudF9kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIikpKQojIAojICMgQ2hpIFNxCiMgZ2lzdF9jaGlzcV9ydiA8LSBwYXJ0aWNpcGFudF9kYXRhICU+JQojICAgdW5ncm91cCgpICU+JQojICAgZmlsdGVyKGRpcmVjdGlvbiA9PSAicmV2ZXJzZWQiKSAlPiUKIyAgIHNlbGVjdChtYWluZ3JvdXAsIGdpc3QpICU+JQojICAgZ3JvdXBfYnkobWFpbmdyb3VwLCBnaXN0KSAlPiUKIyAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiMgICBzcHJlYWQoZ2lzdCwgY291bnQpICU+JQojICAgcmVuYW1lKG5vbmUgPSAiMCIsCiMgICAgICAgICAgb25lID0gIjAuNSIsCiMgICAgICAgICAgYm90aCA9ICIxIikKIyAKIyBnaXN0X2NoaXNxX3J2W2lzLm5hKGdpc3RfY2hpc3FfcnYpXSA8LSAwTAojIGdpc3RfY2hpc3FfcnYgPC0gY2JpbmQoZ2lzdF9jaGlzcV9ydlssIm5vbmUiXSwgZ2lzdF9jaGlzcV9ydlssIm9uZSJdLCBnaXN0X2NoaXNxX3J2WywiYm90aCJdKQojIGNoaXNxLnRlc3QoZ2lzdF9jaGlzcV9ydikKYGBgCgojIyBMZXhpY2FsIFJlY2FsbCBBTk9WQXMKCjEuIEFOT1ZBIHdpdGggZmFjdG9ycyBNYWluR3JvdXAgJiBEaXJlY3Rpb24uCgpgYGB7ciBhY2MgYW5vdmExLCBlY2hvPVRSVUUsIHJlc3VsdHMgPSAnbWFya3VwJ30KIyAjIExleGljYWwgUmVjYWxsIEFOT1ZBIDEKIyBhY2NfYW92MSA8LSBhb3YoYWNjIH4gbWFpbmdyb3VwICogZGlyZWN0aW9uLCBkYXRhID0gcGFydGljaXBhbnRfZGF0YSkKIyBzdW1tYXJ5KGFjY19hb3YxKQojIGFjY19sc2QxIDwtIExTRC50ZXN0KGFjY19hb3YxLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyBhY2NfbHNkMSRjb21wYXJpc29uCgplekFOT1ZBKAogIGRhdGEgPSBwYXJ0aWNpcGFudF9kYXRhLAogIGR2ID0gYWNjLAogIHdpZCA9IGlkLAogIHdpdGhpbiA9IGRpcmVjdGlvbiwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgoyLiBBTk9WQSB3aXRoIGZhY3RvciBNYWluR3JvdXAsIGZvciBGb3J3YXJkIG9ubHkuCgpgYGB7ciBhY2MgYW5vdmEyLCBlY2hvPVRSVUUsIHJlc3VsdHMgPSAnbWFya3VwJ30KIyAjIExleGljYWwgUmVjYWxsIEFOT1ZBIDIKIyBhY2NfYW92MiA8LSBhb3YoYWNjIH4gbWFpbmdyb3VwLCBkYXRhID0gZmlsdGVyKHBhcnRpY2lwYW50X2RhdGEsIGRpcmVjdGlvbiA9PSAiZm9yd2FyZCIpKQojIHN1bW1hcnkoYWNjX2FvdjIpCiMgYWNjX2xzZDIgPC0gTFNELnRlc3QoYWNjX2FvdjIsICJtYWluZ3JvdXAiLCBncm91cCA9IEZBTFNFKQojIGFjY19sc2QyJGNvbXBhcmlzb24KCmV6QU5PVkEoCiAgZGF0YSA9IGZpbHRlcihwYXJ0aWNpcGFudF9kYXRhLCBkaXJlY3Rpb24gPT0gImZvcndhcmQiKSwKICBkdiA9IGFjYywKICB3aWQgPSBpZCwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgozLiBBTk9WQSB3aXRoIGZhY3RvciBNYWluR3JvdXAsIGZvciBSZXZlcnNlIG9ubHkuIAoKYGBge3IgYWNjIGFub3ZhMywgZWNobz1UUlVFLCByZXN1bHRzID0gJ21hcmt1cCd9CiMgIyBMZXhpY2FsIFJlY2FsbCBBTk9WQSAzCiMgYWNjX2FvdjMgPC0gYW92KGFjYyB+IG1haW5ncm91cCwgZGF0YSA9IGZpbHRlcihwYXJ0aWNpcGFudF9kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIikpCiMgc3VtbWFyeShhY2NfYW92MykKIyBhY2NfbHNkMyA8LSBMU0QudGVzdChhY2NfYW92MywgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpCiMgYWNjX2xzZDMkY29tcGFyaXNvbgoKZXpBTk9WQSgKICBkYXRhID0gZmlsdGVyKHBhcnRpY2lwYW50X2RhdGEsIGRpcmVjdGlvbiA9PSAicmV2ZXJzZWQiKSwKICBkdiA9IGFjYywKICB3aWQgPSBpZCwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgojIEFvQSBDb3JyZWxhdGlvbnMKCk5leHQsIHdlIHdhbnQgdG8gbG9vayBhdCBjb3JyZWxhdGlvbnMgYmV0d2VlbiBBb0EgYW5kIEdpc3QsIGFuZCBiZXR3ZW4gQW9BIGFuZCBMZXhpY2FsIFJlY2FsbC4gUmFpbiBhc2tlZCBmb3IgZm9yd2FyZCBhbmQgcmV2ZXJzZWQgc2VwYXJhdGVseSAoMSkgZGVhZiBvbmx5LCAoMikgaGVhcmluZyBvbmx5LCBhbmQgKDMpIGJvdGguIExldCdzIG1ha2UgaXQgd29yay4gCgpgYGB7ciByZXBhY2thZ2UgZGF0YSBmb3IgY29ycmVsYXRpb25zLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIExldCdzIG1ha2UgcGFydGljaXBhbnQtbGV2ZWwgZGF0YSwgYW5kIGhhdmUgZm9yd2FyZC9yZXZlcnNlZCBpbiBzZXBhcmF0ZSBjb2x1bW5zCmxleGdpc3RfZGF0YSA8LSBmdWxsZGF0YSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIHBhcnRpY2lwYW50LCBkaXJlY3Rpb24pICU+JQogIG11dGF0ZShnaXN0ID0gbWVhbihnaXN0LCBuYS5ybSA9IFRSVUUpLAogICAgICAgICBsZXggPSBtZWFuKGFjYywgbmEucm0gPSBUUlVFKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdChtYWluZ3JvdXAsIHBhcnRpY2lwYW50LCBoZWFyaW5nLCBkaXJlY3Rpb24sIGFvYXNsLCBzaWdueXJzLCBhZ2UsIGdpc3QsIGxleCkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIobWV0cmljLCB2YWx1ZSwgZ2lzdDpsZXgpICU+JQogIHVuaXRlKG1ldHJpY3ZhbHVlLCBjKG1ldHJpYywgZGlyZWN0aW9uKSwgc2VwID0gIl8iKSAlPiUKICBzcHJlYWQobWV0cmljdmFsdWUsIHZhbHVlKSAlPiUKICBzZWxlY3QoLXBhcnRpY2lwYW50LCAtbWFpbmdyb3VwKQoKbGV4Z2lzdF9kZWFmIDwtIGxleGdpc3RfZGF0YSAlPiUgZmlsdGVyKGhlYXJpbmcgPT0gIkRlYWYiKSAlPiUgc2VsZWN0KC1oZWFyaW5nKQpsZXhnaXN0X2hlYXJpbmcgPC0gbGV4Z2lzdF9kYXRhICU+JSBmaWx0ZXIoaGVhcmluZyA9PSAiSGVhcmluZyIpICU+JSBzZWxlY3QoLWhlYXJpbmcpCmxleGdpc3RfYWxsIDwtIGxleGdpc3RfZGF0YSAlPiUgc2VsZWN0KC1oZWFyaW5nKQoKIyBMb2FkIGF3ZXNvbWUgZnVuY3Rpb24gdG8gbWFrZSBjb3JyZWxhdGlvbiB0YWJsZXMgd2l0aCBzdGFycyBmb3Igc2lnbmlmaWNhbmNlCiMgRnJvbTogaHR0cHM6Ly9teW93ZWx0LmJsb2dzcG90LmNvLnVrLzIwMDgvMDQvYmVhdXRpZnVsLWNvcnJlbGF0aW9uLXRhYmxlcy1pbi1yLmh0bWwKY29yc3RhcnNsIDwtIGZ1bmN0aW9uKHgpeyAKcmVxdWlyZShIbWlzYykgCnggPC0gYXMubWF0cml4KHgpIApSIDwtIEhtaXNjOjpyY29ycih4KSRyIApwIDwtIEhtaXNjOjpyY29ycih4KSRQIAojIyBkZWZpbmUgbm90aW9ucyBmb3Igc2lnbmlmaWNhbmNlIGxldmVsczsgc3BhY2luZyBpcyBpbXBvcnRhbnQuCm15c3RhcnMgPC0gaWZlbHNlKHAgPCAuMDAxLCAiKioqIiwgaWZlbHNlKHAgPCAuMDEsICIqKiAiLCBpZmVsc2UocCA8IC4wNSwgIiogIiwgIiAiKSkpCiMjIHRydW5jdHVhdGUgdGhlIG1hdHJpeCB0aGF0IGhvbGRzIHRoZSBjb3JyZWxhdGlvbnMgdG8gdHdvIGRlY2ltYWwKUiA8LSBmb3JtYXQocm91bmQoY2JpbmQocmVwKC0xLjExLCBuY29sKHgpKSwgUiksIDIpKVssLTFdIAojIyBidWlsZCBhIG5ldyBtYXRyaXggdGhhdCBpbmNsdWRlcyB0aGUgY29ycmVsYXRpb25zIHdpdGggdGhlaXIgYXByb3ByaWF0ZSBzdGFycyAKUm5ldyA8LSBtYXRyaXgocGFzdGUoUiwgbXlzdGFycywgc2VwPSIiKSwgbmNvbD1uY29sKHgpKSAKZGlhZyhSbmV3KSA8LSBwYXN0ZShkaWFnKFIpLCAiICIsIHNlcD0iIikgCnJvd25hbWVzKFJuZXcpIDwtIGNvbG5hbWVzKHgpIApjb2xuYW1lcyhSbmV3KSA8LSBwYXN0ZShjb2xuYW1lcyh4KSwgIiIsIHNlcD0iIikgCiMjIHJlbW92ZSB1cHBlciB0cmlhbmdsZQpSbmV3IDwtIGFzLm1hdHJpeChSbmV3KQpSbmV3W3VwcGVyLnRyaShSbmV3LCBkaWFnID0gVFJVRSldIDwtICIiClJuZXcgPC0gYXMuZGF0YS5mcmFtZShSbmV3KSAKIyMgcmVtb3ZlIGxhc3QgY29sdW1uIGFuZCByZXR1cm4gdGhlIG1hdHJpeCAod2hpY2ggaXMgbm93IGEgZGF0YSBmcmFtZSkKUm5ldyA8LSBjYmluZChSbmV3WzE6bGVuZ3RoKFJuZXcpLTFdKQpyZXR1cm4oUm5ldykgCn0KCiMgQ29ycmVsYXRpb25zIGZvciBEZWFmCnByaW50KCJERUFGIENvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKI2NvcnN0YXJzbChsZXhnaXN0X2RlYWYpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgobGV4Z2lzdF9kZWFmKSkkcgpwcmludCgiREVBRiBDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgobGV4Z2lzdF9kZWFmKSkkUApjYXQocGFzdGUoIiIsIlxuIiwiIikpCgojIENvcnJlbGF0aW9ucyBmb3IgSGVhcmluZwpwcmludCgiSEVBUklORyBDb3JyZWxhdGlvbnMgLSBQZWFyc29uJ3MgciIpCiNjb3JzdGFyc2wobGV4Z2lzdF9oZWFyaW5nKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGxleGdpc3RfaGVhcmluZykpJHIKcHJpbnQoIkhFQVJJTkcgQ29ycmVsYXRpb25zIC0gUC12YWx1ZXMiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGxleGdpc3RfaGVhcmluZykpJFAKY2F0KHBhc3RlKCIiLCJcbiIsIiIpKQoKIyBDb3JyZWxhdGlvbnMgZm9yIEFsbApwcmludCgiQUxMIENvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKI2NvcnN0YXJzbChsZXhnaXN0X2FsbCkKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeChsZXhnaXN0X2FsbCkpJHIKcHJpbnQoIkFMTCBDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgobGV4Z2lzdF9hbGwpKSRQCgpgYGAKCkknbSBhbHNvIGluY2x1ZGluZyBuaWNlbHkgZm9ybWF0dGVkIHRhYmxlcyB3aXRoICoqKiBpbmRpY2F0b3JzIG9mIHNpZ25pZmljYW5jZSBmb3IgcXVpY2sgcmVmZXJlbmNpbmcuIE9yZGVyOiBEZWFmLCBIZWFyaW5nLCBBbGwuIAoKYGBge3IgcHJldHR5IGNvcnJlbGF0aW9uc30KY29yc3RhcnNsKGxleGdpc3RfZGVhZikKY29yc3RhcnNsKGxleGdpc3RfaGVhcmluZykKY29yc3RhcnNsKGxleGdpc3RfYWxsKQpgYGAKCiMjIFNjYXR0ZXJwbG90IG9mIENvcnJlbGF0aW9ucwpMZXQncyB2aXN1YWxpemUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBjb3JyZWxhdGlvbnMgaGVyZS4gCmBgYHtyIGNvcnJlbGF0aW9uIGNoYXJ0cywgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTEyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpnZ3BhaXJzKGxleGdpc3RfZGF0YSwgY29sdW1ucyA9IGMoMjo4KSwgYWVzKGNvbG9yID0gaGVhcmluZykpCmBgYAoKCiMgRXllIEdhemUgRGF0YQoKTm93IGV5ZSBnYXplIGRhdGEuIEJveHBsb3RzIGZpcnN0LiBBbHNvIGhlcmUsIHdlJ3JlIHJlbmFtaW5nICJjaGluIiB0byAibmVjayIgYmVjYXVzZSB0aGF0J3Mgd2hhdCBpdCBhY3R1YWxseSBpcyEgQnV0IHdlIGFsc28gaGF2ZSB0byBmaXggYWxsIE5BJ3MgaW4gdGhlIHBlcmNlbnRhZ2VzIHRvIHplcm9zLCBiZWN1YXNlIHRoYXQncyB3aGF0IHRoZXkgYWN0dWFsbHkgYXJlLiAKYGBge3IgZXllIGdhemUgYm94cGxvdH0KIyByZW5hbWUgY2hpbiB0byBuZWNrCmZ1bGxkYXRhIDwtIGZ1bGxkYXRhICU+JQogIHJlbmFtZShuZWNrID0gY2hpbikgJT4lCiAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgYmVsbHk6dXBwZXJjaGVzdCkKCiMgRml4IGFsbCBOQSdzIGluIFBlcmNlbnQgY29sdW1uIHRvIDAKZml4cGVyY2VudCA8LSBmdWxsZGF0YSRwZXJjZW50CmZ1bGxkYXRhJHBlcmNlbnQgPC0gY29hbGVzY2UoZml4cGVyY2VudCwgMCkKZnVsbGRhdGEgPC0gZnVsbGRhdGEgJT4lCiAgc3ByZWFkKGFvaSwgcGVyY2VudCkKCmZ1bGxkYXRhICU+JQogIGZpbHRlcihleWVfZXhjbHVkZSA9PSBGQUxTRSkgJT4lCiAgc2VsZWN0KGRpcmVjdGlvbiwgYmVsbHk6dXBwZXJjaGVzdCkgJT4lCiAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgYmVsbHk6dXBwZXJjaGVzdCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYW9pLCB5ID0gcGVyY2VudCwgZmlsbCA9IGRpcmVjdGlvbikpICsgZ2VvbV9ib3hwbG90KCkKYGBgCgpCdXQgbGV0J3MgdHJ5IGVycm9yIGNoYXJ0cyB0b28hIEluc3RlYWQgb2YgYm94cGxvdHMuCgpgYGB7ciBleWUgZ2F6ZSBlcnJvciBiYXIgY2hhcnR9CmZ1bGxkYXRhX2Vycm9yIDwtIGZ1bGxkYXRhICU+JQogIGZpbHRlcihleWVfZXhjbHVkZSA9PSBGQUxTRSkgJT4lCiAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgYmVsbHk6dXBwZXJjaGVzdCkgJT4lCiAgZ3JvdXBfYnkoaWQsIGRpcmVjdGlvbiwgYW9pKSAlPiUKICBzdW1tYXJpc2UocGVyY2VudCA9IG1lYW4ocGVyY2VudCwgbmEucm0gPSBUUlVFKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ3JvdXBfYnkoZGlyZWN0aW9uLCBhb2kpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihwZXJjZW50LCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICBzZCA9IHNkKHBlcmNlbnQsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIGNvdW50ID0gbigpLAogICAgICAgICAgICBzZSA9IHNkL3NxcnQoY291bnQpKQpmdWxsZGF0YV9lcnJvciRhb2kgPC0gZmN0X3JlbGV2ZWwoZnVsbGRhdGFfZXJyb3IkYW9pLCBjKCJmb3JlaGVhZCIsImV5ZXMiLCJtb3V0aCIsIm5lY2siLCJ1cHBlcmNoZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlkY2hlc3QiLCJsb3dlcmNoZXN0IiwiYmVsbHkiLCJsZWZ0IiwicmlnaHQiKSkKCmZ1bGxkYXRhX2Vycm9yICU+JQogIGdncGxvdChhZXMoeCA9IGFvaSwgeSA9IG1lYW4sIGZpbGwgPSBkaXJlY3Rpb24pKSArIAogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhbi1zZSwgeW1heCA9IG1lYW4rc2UpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSksIHdpZHRoID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJFeWUgR2F6ZSBCZWhhdmlvciIsIHggPSAiIiwgeSA9ICJsb29raW5nIHRpbWUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQsIGxpbWl0cyA9IGMoMCwuNzApKSArIAogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkKYGBgCgpBbmQgYSB0YWJsZSBvZiBleWUgZ2F6ZSByZXN1bHRzIHRvbwoKYGBge3IgZXllIGdhemUgZXJyb3IgdGFibGV9CmZ1bGxkYXRhX2dhemV0YWJsZSA8LSBmdWxsZGF0YSAlPiUKICBmaWx0ZXIoZXllX2V4Y2x1ZGUgPT0gRkFMU0UpICU+JQogIGdhdGhlcihhb2ksIHBlcmNlbnQsIGJlbGx5OnVwcGVyY2hlc3QpICU+JQogIGdyb3VwX2J5KGlkLCBtYWluZ3JvdXAsIGRpcmVjdGlvbiwgYW9pKSAlPiUKICBzdW1tYXJpc2UocGVyY2VudCA9IG1lYW4ocGVyY2VudCwgbmEucm0gPSBUUlVFKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ3JvdXBfYnkobWFpbmdyb3VwLCBkaXJlY3Rpb24sIGFvaSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHBlcmNlbnQsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIHNkID0gc2QocGVyY2VudCwgbmEucm0gPSBUUlVFKSkgJT4lCiAgbXV0YXRlKG1lYW4gPSByb3VuZChtZWFuKjEwMCwxKSwKICAgICAgICAgc2QgPSByb3VuZChzZCoxMDAsMSkpICU+JQogIG11dGF0ZSh2YWx1ZSA9IHBhc3RlKG1lYW4sIHNkLCBzZXAgPSAiIMKxICIpKSAlPiUKICBtdXRhdGUodmFsdWUgPSBwYXN0ZSh2YWx1ZSwgIiUiLCBzZXAgPSAiIikpCgpmdWxsZGF0YV9nYXpldGFibGUkYW9pIDwtIGZjdF9yZWxldmVsKGZ1bGxkYXRhX2dhemV0YWJsZSRhb2ksIGMoImZvcmVoZWFkIiwiZXllcyIsIm1vdXRoIiwibmVjayIsInVwcGVyY2hlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWRjaGVzdCIsImxvd2VyY2hlc3QiLCJiZWxseSIsImxlZnQiLCJyaWdodCIpKQoKZnVsbGRhdGFfZ2F6ZXRhYmxlICU+JSAKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1tZWFuLCAtc2QpICU+JSAKICBzcHJlYWQoYW9pLCB2YWx1ZSkKCmZ1bGxkYXRhX3RvdGFsIDwtIGZ1bGxkYXRhICU+JQogIGZpbHRlcihleWVfZXhjbHVkZSA9PSBGQUxTRSkgJT4lCiAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgYmVsbHk6dXBwZXJjaGVzdCkgJT4lCiAgZ3JvdXBfYnkoYW9pKSAlPiUKICBzdW1tYXJpc2UocGVyY2VudCA9IG1lYW4ocGVyY2VudCwgbmEucm0gPSBUUlVFKSkgJT4lCiAgc3ByZWFkKGFvaSwgcGVyY2VudCkKCiNzdW0oZnVsbGRhdGFfdG90YWwkZXllcywgZnVsbGRhdGFfdG90YWwkbW91dGgsIGZ1bGxkYXRhX3RvdGFsJG5lY2spCiNmdWxsZGF0YV90b3RhbCRsZWZ0CiNmdWxsZGF0YV90b3RhbCRyaWdodApgYGAKIyMgQmlnIFRocmVlLVdheSBBTk9WQQpOb3cgd2UncmUgZ29pbmcgdG8gdHJ5IGEgdGhyZWUtd2F5IEdyb3VwIHggRGlyZWN0aW9uIHggQU9JIEFOT1ZBIHdpdGggdGhlIHRvcCAzIEFPSXMgKEV5ZXMsIE1vdXRoLCBOZWNrKQoKYGBge3IgYmlnIGFub3ZhIGFvaTMsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHJlc3VsdHM9Im1hcmt1cCJ9CmFvaTMgPC0gYygnZXllcycsJ21vdXRoJywnbmVjaycpCgojIE9yZ2FuaXplIHRoZSBkYXRhIGJ5IHRob3NlIEFPSXMgKGJ1dCBhZ2FpbiB3ZSBuZWVkIHBhcnRpY2lwYW50LWxldmVsIGZpcnN0KQphb2kzX2RhdGEgPC0gZnVsbGRhdGEgJT4lCiAgZmlsdGVyKGV5ZV9leGNsdWRlID09IEZBTFNFKSAlPiUKICBzZWxlY3QoaWQsIG1haW5ncm91cCwgaGVhcmluZywgYW9hc2wsIGFnZSwgZGlyZWN0aW9uLCBiZWxseTp1cHBlcmNoZXN0KSAlPiUKICBnYXRoZXIoYW9pLCBwZXJjZW50LCBiZWxseTp1cHBlcmNoZXN0KSAlPiUKICBncm91cF9ieShpZCwgZGlyZWN0aW9uLCBhb2kpICU+JQogIG11dGF0ZShwZXJjZW50ID0gbWVhbihwZXJjZW50LCBuYS5ybSA9IFRSVUUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBmaWx0ZXIoYW9pICVpbiUgYW9pMykgJT4lCiAgc3ByZWFkKGFvaSwgcGVyY2VudCkKCiMgIyBMaW1pdCB0byBleWVzIG1vdXRoIG5lY2sKIyBiaWdfYW92X2FvaTMgPC0gYW9pM19kYXRhICU+JQojICAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgZXllczpuZWNrKSAlPiUKIyAgIGFvdihwZXJjZW50IH4gbWFpbmdyb3VwICogZGlyZWN0aW9uICogYW9pLCBkYXRhID0gLikKIyAKIyBzdW1tYXJ5KGJpZ19hb3ZfYW9pMykKIyAKIyBiaWdfYW92X2FvaTNfbHNkIDwtIExTRC50ZXN0KGJpZ19hb3ZfYW9pMywgImFvaSIsIGdyb3VwID0gRkFMU0UpCiMgYmlnX2Fvdl9hb2kzX2xzZCRjb21wYXJpc29uCgphb2kzX2RhdGFfZ2F0aGVyIDwtIGFvaTNfZGF0YSAlPiUKICBnYXRoZXIoYW9pLCBwZXJjZW50LCBleWVzOm5lY2spICU+JQogIGZpbHRlcihpZCAhPSAiNiIpCgpiaWczX2FvdiA8LSBlekFOT1ZBKAogIGRhdGEgPSBhb2kzX2RhdGFfZ2F0aGVyLAogIGR2ID0gcGVyY2VudCwKICB3aWQgPSBpZCwKICB3aXRoaW4gPSAuKGRpcmVjdGlvbiwgYW9pKSwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KCnByaW50KGJpZzNfYW92WyJBTk9WQSJdKQpgYGAKIyMgTGVmdCBWcyBSaWdodApgYGB7ciBsZWZ0IHJpZ2h0IGFub3ZhLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSJtYXJrdXAifQphb2kzIDwtIGMoJ2xlZnQnLCdyaWdodCcpCgojIE9yZ2FuaXplIHRoZSBkYXRhIGJ5IHRob3NlIEFPSXMgKGJ1dCBhZ2FpbiB3ZSBuZWVkIHBhcnRpY2lwYW50LWxldmVsIGZpcnN0KQphb2lMUl9kYXRhIDwtIGZ1bGxkYXRhICU+JQogIGZpbHRlcihleWVfZXhjbHVkZSA9PSBGQUxTRSkgJT4lCiAgc2VsZWN0KGlkLCBtYWluZ3JvdXAsIGhlYXJpbmcsIGFvYXNsLCBhZ2UsIGRpcmVjdGlvbiwgYmVsbHk6dXBwZXJjaGVzdCkgJT4lCiAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgYmVsbHk6dXBwZXJjaGVzdCkgJT4lCiAgZ3JvdXBfYnkoaWQsIGFvaSkgJT4lCiAgbXV0YXRlKHBlcmNlbnQgPSBtZWFuKHBlcmNlbnQsIG5hLnJtID0gVFJVRSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGZpbHRlcihhb2kgJWluJSBhb2kzKSAlPiUKICBzcHJlYWQoYW9pLCBwZXJjZW50KQoKYW9pTFJfZGF0YV9nYXRoZXIgPC0gYW9pTFJfZGF0YSAlPiUKICBnYXRoZXIoYW9pLCBwZXJjZW50LCBsZWZ0OnJpZ2h0KSAlPiUKICBmaWx0ZXIoaWQgIT0gIjYiKQoKYmlnTFJfYW92IDwtIGV6QU5PVkEoCiAgZGF0YSA9IGFvaUxSX2RhdGFfZ2F0aGVyLAogIGR2ID0gcGVyY2VudCwKICB3aWQgPSBpZCwKICB3aXRoaW4gPSBhb2ksCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCgpwcmludChiaWdMUl9hb3ZbIkFOT1ZBIl0pCmBgYAoKIyMgSW50ZXJhY3Rpb25zIFZpc3VhbGl6YXRpb24KU28gd2UgaGF2ZSBzaWduaWZpY2FudCBtYWluZ3JvdXA6YW9pIGFuZCBkaXJlY3Rpb246YW9pIGludGVyYWN0aW9ucy4gTGV0J3MgdHJ5IHRvIHZpc3VhbGl6ZSB3aGF0IGNhbiBiZSBkcml2aW5nIHRoZXNlLiBXZSBjYW4gZ28gYmFjayB0byB0aGUgU0VNIGNoYXJ0IGJ1dCBicmVhayBpdCBkb3duLi4uCgpGaXJzdCBhcmUgdGhlIG1haW5ncm91cDphb2kgY2hhcnRzICpUaGUgZXJyb3IgYmFycyBhcmUgbm90IDEwMCUgYWNjdXJhdGUsIEkgdG9vayBhIHF1aWNrLW4tZWFzeSB3YXkgYXJvdW5kKgoKYGBge3J9CmFvaTNfaW50ZXJhY3Rpb25zX21haW5ncm91cGFvaSA8LSBmdWxsZGF0YSAlPiUKICBmaWx0ZXIoZXllX2V4Y2x1ZGUgPT0gRkFMU0UpICU+JQogIHNlbGVjdChpZCwgcGFydGljaXBhbnQsIG1haW5ncm91cCwgZGlyZWN0aW9uLCBleWVzLCBtb3V0aCwgbmVjaykgJT4lCiAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgYyhleWVzLCBtb3V0aCwgbmVjaykpICU+JQogIGdyb3VwX2J5KGlkLCBtYWluZ3JvdXAsIGRpcmVjdGlvbiwgYW9pKSAlPiUKICBtdXRhdGUocGVyY2VudCA9IG1lYW4ocGVyY2VudCwgbmEucm0gPSBUUlVFKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIGFvaSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHBlcmNlbnQsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIHNkID0gc2QocGVyY2VudCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgY291bnQgPSBuKCkvMiwKICAgICAgICAgICAgc2UgPSBzZC9zcXJ0KGNvdW50KSkKIyBJIG5lZWQgdG8gZmlyc3QgY29sbGFwc2UgYWNyb3NzIHN0b3JpZXMgZm9yIGVhY2ggcGFydGljaXBhbnQuLi5oZXJlIEkgZGlkbid0LiBNdXN0IGZpeCBsYXRlci4KCmFvaTNfaW50ZXJhY3Rpb25zX21haW5ncm91cGFvaSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gYW9pLCB5ID0gbWVhbiwgZmlsbCA9IG1haW5ncm91cCkpICsgCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWFuLXNlLCB5bWF4ID0gbWVhbitzZSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSwgd2lkdGggPSAwLjUpICsKICBsYWJzKHRpdGxlID0gIk1haW5Hcm91cCAmIEFPSSBJbnRlcmFjdGlvbiAxIiwgc3VidGl0bGUgPSAiRXJyb3IgYmFycyByZXByZXNlbnQgU0UiLCB4ID0gIiIsIHkgPSAicGVyY2VudCBsb29raW5nIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50KQoKYW9pM19pbnRlcmFjdGlvbnNfbWFpbmdyb3VwYW9pICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBtYWluZ3JvdXAsIHkgPSBtZWFuLCBmaWxsID0gYW9pKSkgKyAKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG1lYW4tc2UsIHltYXggPSBtZWFuK3NlKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpLCB3aWR0aCA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiTWFpbkdyb3VwICYgQU9JIEludGVyYWN0aW9uIDIiLCBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIHJlcHJlc2VudCBTRSIsIHggPSAiIiwgeSA9ICJwZXJjZW50IGxvb2tpbmciKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQpCgoKYGBgCgpGaXJzdCBhcmUgdGhlIGRpcmVjdGlvbjphb2kgY2hhcnRzICpUaGUgZXJyb3IgYmFycyBhcmUgbm90IDEwMCUgYWNjdXJhdGUsIEkgdG9vayBhIHF1aWNrLW4tZWFzeSB3YXkgYXJvdW5kKgoKYGBge3J9CmFvaTNfaW50ZXJhY3Rpb25zX2RpcmVjdGlvbmFvaSA8LSBmdWxsZGF0YSAlPiUKICBmaWx0ZXIoZXllX2V4Y2x1ZGUgPT0gRkFMU0UpICU+JQogIHNlbGVjdChpZCwgcGFydGljaXBhbnQsIG1haW5ncm91cCwgZGlyZWN0aW9uLCBleWVzLCBtb3V0aCwgbmVjaykgJT4lCiAgZ2F0aGVyKGFvaSwgcGVyY2VudCwgYyhleWVzLCBtb3V0aCwgbmVjaykpICU+JQogIGdyb3VwX2J5KGlkLCBtYWluZ3JvdXAsIGRpcmVjdGlvbiwgYW9pKSAlPiUKICBtdXRhdGUocGVyY2VudCA9IG1lYW4ocGVyY2VudCwgbmEucm0gPSBUUlVFKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBncm91cF9ieShkaXJlY3Rpb24sIGFvaSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHBlcmNlbnQsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIHNkID0gc2QocGVyY2VudCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgY291bnQgPSBuKCksCiAgICAgICAgICAgIHNlID0gc2Qvc3FydChjb3VudCkpCiMgSSBuZWVkIHRvIGZpcnN0IGNvbGxhcHNlIGFjcm9zcyBzdG9yaWVzIGZvciBlYWNoIHBhcnRpY2lwYW50Li4uaGVyZSBJIGRpZG4ndC4gTXVzdCBmaXggbGF0ZXIuCgphb2kzX2ludGVyYWN0aW9uc19kaXJlY3Rpb25hb2kgJT4lIAogIGdncGxvdChhZXMoeCA9IGFvaSwgeSA9IG1lYW4sIGZpbGwgPSBkaXJlY3Rpb24pKSArIAogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhbi1zZSwgeW1heCA9IG1lYW4rc2UpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSksIHdpZHRoID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJNYWluR3JvdXAgJiBEaXJlY3Rpb24gSW50ZXJhY3Rpb24gMSIsIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgcmVwcmVzZW50IFNFIiwgeCA9ICIiLCB5ID0gInBlcmNlbnQgbG9va2luZyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudCkKCmFvaTNfaW50ZXJhY3Rpb25zX2RpcmVjdGlvbmFvaSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZGlyZWN0aW9uLCB5ID0gbWVhbiwgZmlsbCA9IGFvaSkpICsgCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWFuLXNlLCB5bWF4ID0gbWVhbitzZSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSwgd2lkdGggPSAwLjUpICsKICBsYWJzKHRpdGxlID0gIk1haW5Hcm91cCAmIERpcmVjdGlvbiBJbnRlcmFjdGlvbiAyIiwgc3VidGl0bGUgPSAiRXJyb3IgYmFycyByZXByZXNlbnQgU0UiLCB4ID0gIiIsIHkgPSAicGVyY2VudCBsb29raW5nIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50KQpgYGAKCgojIyBBbGwgdGhlIEFPSSBtZWFucwpMZXQncyBnZXQgdGFibGVzIG9mIG91ciBtZWFucyBoZXJlLCBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zCgpgYGB7ciBhb2kgcmF3LCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30KYW9pM19kYXRhICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCwgZGlyZWN0aW9uKSAlPiUKICBzdW1tYXJpc2UoZXllcyA9IG1lYW4oZXllcywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbW91dGggPSBtZWFuKG1vdXRoLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICBuZWNrID0gbWVhbihuZWNrLCBuYS5ybSA9IFRSVUUpKSAlPiUKICByb3d3aXNlKCkgJT4lCiAgbXV0YXRlKHRvdGFsID0gc3VtKGV5ZXMsbW91dGgsbmVjaykpCgphb2kzX2RhdGEgJT4lCiAgZ3JvdXBfYnkobWFpbmdyb3VwLCBkaXJlY3Rpb24pICU+JQogIHN1bW1hcmlzZShleWVzID0gbWVhbihleWVzLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICBtb3V0aCA9IG1lYW4obW91dGgsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIG5lY2sgPSBtZWFuKG5lY2ssIG5hLnJtID0gVFJVRSkpICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCkgJT4lCiAgc3VtbWFyaXNlKGV5ZXMgPSBtZWFuKGV5ZXMsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIG1vdXRoID0gbWVhbihtb3V0aCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbmVjayA9IG1lYW4obmVjaywgbmEucm0gPSBUUlVFKSkgICU+JQogIHJvd3dpc2UoKSAlPiUKICBtdXRhdGUodG90YWwgPSBzdW0oZXllcyxtb3V0aCxuZWNrKSkKCmFvaTNfZGF0YSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIGRpcmVjdGlvbikgJT4lCiAgc3VtbWFyaXNlKGV5ZXMgPSBtZWFuKGV5ZXMsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIG1vdXRoID0gbWVhbihtb3V0aCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbmVjayA9IG1lYW4obmVjaywgbmEucm0gPSBUUlVFKSkgJT4lCiAgZ3JvdXBfYnkoZGlyZWN0aW9uKSAlPiUKICBzdW1tYXJpc2UoZXllcyA9IG1lYW4oZXllcywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbW91dGggPSBtZWFuKG1vdXRoLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICBuZWNrID0gbWVhbihuZWNrLCBuYS5ybSA9IFRSVUUpKSAlPiUKICByb3d3aXNlKCkgJT4lCiAgbXV0YXRlKHRvdGFsID0gc3VtKGV5ZXMsbW91dGgsbmVjaykpCgphb2kzX2RhdGEgJT4lCiAgZ3JvdXBfYnkobWFpbmdyb3VwLCBkaXJlY3Rpb24pICU+JQogIHN1bW1hcmlzZShleWVzID0gbWVhbihleWVzLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICBtb3V0aCA9IG1lYW4obW91dGgsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIG5lY2sgPSBtZWFuKG5lY2ssIG5hLnJtID0gVFJVRSkpICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCkgJT4lCiAgc3VtbWFyaXNlKGV5ZXMgPSBtZWFuKGV5ZXMsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICAgIG1vdXRoID0gbWVhbihtb3V0aCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgICAgbmVjayA9IG1lYW4obmVjaywgbmEucm0gPSBUUlVFKSkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBnYXRoZXIoYW9pLCBwZXJjZW50LCBleWVzOm5lY2spICU+JQogIGdyb3VwX2J5KGFvaSkgJT4lCiAgc3VtbWFyaXNlKHBlcmNlbnQgPSBtZWFuKHBlcmNlbnQsIG5hLnJtID0gVFJVRSkpCmBgYAoKCiMjIEV5ZXMKCjEuIEFOT1ZBIHdpdGggZmFjdG9ycyBNYWluR3JvdXAgJiBEaXJlY3Rpb24uCgpgYGB7ciBleWVzIGFub3ZhMSwgZWNobz1GQUxTRSwgcmVzdWx0cyA9ICdtYXJrdXAnfQoKIyAjIGV5ZXMgQU5DT1ZBIDEKIyBleWVzX2FvdjEgPC0gYW92KGV5ZXMgfiBtYWluZ3JvdXAgKiBkaXJlY3Rpb24sIGRhdGEgPSBhb2kzX2RhdGEpCiMgc3VtbWFyeShleWVzX2FvdjEpCiMgIyBleWVzX2xzZDEgPC0gTFNELnRlc3QoZXllc19hb3YxLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyAjIGV5ZXNfbHNkMSRjb21wYXJpc29uCgphb2kzX2RhdGEgPC0gZmlsdGVyKGFvaTNfZGF0YSwgaWQgIT0gIjYiKQplekFOT1ZBKAogIGRhdGEgPSBhb2kzX2RhdGEsCiAgZHYgPSBleWVzLAogIHdpZCA9IGlkLAogIHdpdGhpbiA9IGRpcmVjdGlvbiwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgoyLiBBTk9WQSB3aXRoIGZhY3RvciBNYWluR3JvdXAsIGZvciBGb3J3YXJkIG9ubHkuCgpgYGB7ciBleWVzIGFub3ZhMiwgZWNobz1GQUxTRSwgcmVzdWx0cyA9ICdtYXJrdXAnfQojICMgZXllcyBBTk9WQSAyCiMgZXllc19hb3YyIDwtIGFvdihleWVzIH4gbWFpbmdyb3VwLCBkYXRhID0gZmlsdGVyKGFvaTNfZGF0YSwgZGlyZWN0aW9uID09ICJmb3J3YXJkIikpCiMgc3VtbWFyeShleWVzX2FvdjIpCiMgIyBleWVzX2xzZDIgPC0gTFNELnRlc3QoZXllc19hb3YyLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyAjIGV5ZXNfbHNkMiRjb21wYXJpc29uCgplekFOT1ZBKAogIGRhdGEgPSBmaWx0ZXIoYW9pM19kYXRhLCBkaXJlY3Rpb24gPT0gImZvcndhcmQiKSwKICBkdiA9IGV5ZXMsCiAgd2lkID0gaWQsCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCmBgYAoKMy4gQU5PVkEgd2l0aCBmYWN0b3IgTWFpbkdyb3VwLCBmb3IgUmV2ZXJzZSBvbmx5LiAKCmBgYHtyIGV5ZXMgYW5vdmEzLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gJ21hcmt1cCd9CiMgIyBleWVzIEFOT1ZBIDMKIyBleWVzX2FvdjMgPC0gYW92KGV5ZXMgfiBtYWluZ3JvdXAsIGRhdGEgPSBmaWx0ZXIoYW9pM19kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIikpCiMgc3VtbWFyeShleWVzX2FvdjMpCiMgIyBleWVzX2xzZDMgPC0gTFNELnRlc3QoZXllc19hb3YzLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyAjIGV5ZXNfbHNkMyRjb21wYXJpc29uCgplekFOT1ZBKAogIGRhdGEgPSBmaWx0ZXIoYW9pM19kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIiksCiAgZHYgPSBleWVzLAogIHdpZCA9IGlkLAogIGJldHdlZW4gPSBtYWluZ3JvdXAsCiAgdHlwZSA9IDMKKVsiQU5PVkEiXQpgYGAKCiMjIE1vdXRoCgoxLiBBTk9WQSB3aXRoIGZhY3RvcnMgTWFpbkdyb3VwICYgRGlyZWN0aW9uLgoKYGBge3IgbW91dGggYW5vdmExLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gJ21hcmt1cCd9CgojICMgbW91dGggQU5DT1ZBIDEKIyBtb3V0aF9hb3YxIDwtIGFvdihtb3V0aCB+IG1haW5ncm91cCAqIGRpcmVjdGlvbiwgZGF0YSA9IGFvaTNfZGF0YSkKIyBzdW1tYXJ5KG1vdXRoX2FvdjEpCiMgbW91dGhfbHNkMSA8LSBMU0QudGVzdChtb3V0aF9hb3YxLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyBtb3V0aF9sc2QxJGNvbXBhcmlzb24KCmV6QU5PVkEoCiAgZGF0YSA9IGFvaTNfZGF0YSwKICBkdiA9IG1vdXRoLAogIHdpZCA9IGlkLAogIHdpdGhpbiA9IGRpcmVjdGlvbiwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgoyLiBBTk9WQSB3aXRoIGZhY3RvciBNYWluR3JvdXAsIGZvciBGb3J3YXJkIG9ubHkuCgpgYGB7ciBtb3V0aCBhbm92YTIsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30KIyAjIG1vdXRoIEFOT1ZBIDIKIyBtb3V0aF9hb3YyIDwtIGFvdihtb3V0aCB+IG1haW5ncm91cCwgZGF0YSA9IGZpbHRlcihhb2kzX2RhdGEsIGRpcmVjdGlvbiA9PSAiZm9yd2FyZCIpKQojIHN1bW1hcnkobW91dGhfYW92MikKIyAjIG1vdXRoX2xzZDIgPC0gTFNELnRlc3QobW91dGhfYW92MiwgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpCiMgIyBtb3V0aF9sc2QyJGNvbXBhcmlzb24KZXpBTk9WQSgKICBkYXRhID0gZmlsdGVyKGFvaTNfZGF0YSwgZGlyZWN0aW9uID09ICJmb3J3YXJkIiksCiAgZHYgPSBtb3V0aCwKICB3aWQgPSBpZCwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgozLiBBTk9WQSB3aXRoIGZhY3RvciBNYWluR3JvdXAsIGZvciBSZXZlcnNlIG9ubHkuIAoKYGBge3IgbW91dGggYW5vdmEzLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gJ21hcmt1cCd9CiMgIyBtb3V0aCBBTk9WQSAzCiMgbW91dGhfYW92MyA8LSBhb3YobW91dGggfiBtYWluZ3JvdXAsIGRhdGEgPSBmaWx0ZXIoYW9pM19kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIikpCiMgc3VtbWFyeShtb3V0aF9hb3YzKQojICMgbW91dGhfbHNkMyA8LSBMU0QudGVzdChtb3V0aF9hb3YzLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyAjIG1vdXRoX2xzZDMkY29tcGFyaXNvbgplekFOT1ZBKAogIGRhdGEgPSBmaWx0ZXIoYW9pM19kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIiksCiAgZHYgPSBtb3V0aCwKICB3aWQgPSBpZCwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgojIyBOZWNrCgoxLiBBTk9WQSB3aXRoIGZhY3RvcnMgTWFpbkdyb3VwICYgRGlyZWN0aW9uLgoKYGBge3IgbmVjayBhbm92YTEsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30KCiMgIyBuZWNrIEFOQ09WQSAxCiMgbmVja19hb3YxIDwtIGFvdihuZWNrIH4gbWFpbmdyb3VwICogZGlyZWN0aW9uLCBkYXRhID0gYW9pM19kYXRhKQojIHN1bW1hcnkobmVja19hb3YxKQojICMgbmVja19sc2QxIDwtIExTRC50ZXN0KG5lY2tfYW92MSwgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpCiMgIyBuZWNrX2xzZDEkY29tcGFyaXNvbgoKZXpBTk9WQSgKICBkYXRhID0gYW9pM19kYXRhLAogIGR2ID0gbmVjaywKICB3aWQgPSBpZCwKICB3aXRoaW4gPSBkaXJlY3Rpb24sCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCmBgYAoKMi4gQU5PVkEgd2l0aCBmYWN0b3IgTWFpbkdyb3VwLCBmb3IgRm9yd2FyZCBvbmx5LgoKYGBge3IgbmVjayBhbm92YTIsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30KIyAjIG5lY2sgQU5PVkEgMgojIG5lY2tfYW92MiA8LSBhb3YobmVjayB+IG1haW5ncm91cCwgZGF0YSA9IGZpbHRlcihhb2kzX2RhdGEsIGRpcmVjdGlvbiA9PSAiZm9yd2FyZCIpKQojIHN1bW1hcnkobmVja19hb3YyKQojICMgbmVja19sc2QyIDwtIExTRC50ZXN0KG5lY2tfYW92MiwgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpCiMgIyBuZWNrX2xzZDIkY29tcGFyaXNvbgplekFOT1ZBKAogIGRhdGEgPSBmaWx0ZXIoYW9pM19kYXRhLCBkaXJlY3Rpb24gPT0gImZvcndhcmQiKSwKICBkdiA9IG5lY2ssCiAgd2lkID0gaWQsCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCmBgYAoKMy4gQU5PVkEgd2l0aCBmYWN0b3IgTWFpbkdyb3VwLCBmb3IgUmV2ZXJzZSBvbmx5LiAKCmBgYHtyIG5lY2sgYW5vdmEzLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gJ21hcmt1cCd9CiMgIyBuZWNrIEFOT1ZBIDMKIyBuZWNrX2FvdjMgPC0gYW92KG5lY2sgfiBtYWluZ3JvdXAsIGRhdGEgPSBmaWx0ZXIoYW9pM19kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIikpCiMgc3VtbWFyeShuZWNrX2FvdjMpCiMgIyBuZWNrX2xzZDMgPC0gTFNELnRlc3QobmVja19hb3YzLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyAjIG5lY2tfbHNkMyRjb21wYXJpc29uCmV6QU5PVkEoCiAgZGF0YSA9IGZpbHRlcihhb2kzX2RhdGEsIGRpcmVjdGlvbiA9PSAicmV2ZXJzZWQiKSwKICBkdiA9IG5lY2ssCiAgd2lkID0gaWQsCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCmBgYAoKIyMgRmFjZUNoZXN0CgpXZSBvcmlnaW5hbGx5IGRlZmluZWQgRmFjZUNoZXN0IHN1Y2ggdGhhdAoKMS4gRmFjZSA9IGV5ZXMgKyBtb3V0aCArIGNoaW4KMS4gQ2hlc3QgPSB1cHBlcmNoZXN0ICsgbWlkY2hlc3QgKyBsb3dlcmNoZXN0CgpCVVQuIENoaW4gaXMgYWN0dWFsbHkgbmVjay4gSXQncyBub3QgZXZlbiBwYXJ0IG9mIHRoZSBmYWNlIGlmIHlvdSB0aGluayBhYm91dCBpdC4gU28gSSdtIHJlZGVmaW5pbmcgRmFjZUNoZXN0IGFzOgoKMS4gRmFjZSA9IGZvcmVoZWFkICsgZXllcyArIG1vdXRoCjEuIENoZXN0ID0gbmVjayArIHVwcGVyY2hlc3QgKyBtaWRjaGVzdCArIGxvd2VyY2hlc3QKClNvIGxldCdzIGRvIHRoaXMuIFRoZW4gc2VlIHdoYXQncyBoYXBwZW5pbmcgYWNyb3NzIGdyb3VwcyBmb3IgRmFjZUNoZXN0LgoKYGBge3IgY2FsY3VsYXRlIGZhY2VjaGVzdCwgZWNobz1GQUxTRSwgcmVzdWx0cyA9ICdtYXJrdXAnfQojIENhbGN1bGF0ZSBmYWNlLCBjaGVzdCwgYW5kIGZhY2VjaGVzdCAtIGFuZCBtb3V0aGV5ZSB0b28KZnVsbGRhdGEgPC0gZnVsbGRhdGEgJT4lCiAgcm93d2lzZSgpICU+JQogIG11dGF0ZShmYWNlID0gc3VtKGZvcmVoZWFkLCBleWVzLCBtb3V0aCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgY2hlc3QgPSBzdW0obmVjaywgdXBwZXJjaGVzdCwgbWlkY2hlc3QsIGxvd2VyY2hlc3QsIG5hLnJtID0gVFJVRSksCiAgICAgICAgIGZhY2VjaGVzdCA9IChmYWNlIC0gY2hlc3QpLyhmYWNlICsgY2hlc3QpLAogICAgICAgICBtb3V0aGV5ZSA9IChtb3V0aCAtIGV5ZXMpLyhtb3V0aCArIGV5ZXMpKQoKIyBmdWxsZGF0YSAlPiUgCiMgICBnYXRoZXIobWV0cmljLCB2YWx1ZSwgYyhmYWNlY2hlc3Rfb2xkLCBmYWNlY2hlc3QpKSAlPiUKIyAgIGdncGxvdChhZXMoeCA9IG1haW5ncm91cCwgeSA9IHZhbHVlLCBmaWxsID0gZGlyZWN0aW9uKSkgKyBnZW9tX2JveHBsb3QoKSArIGZhY2V0X3dyYXAoIm1ldHJpYyIpCmBgYAoKQ29vbC4gTmV4dCB3ZSdsbCBkbyBlcnJvciBiYXIgY2hhcnRzIHVzaW5nIHRoZSBuZXcgRmFjZUNoZXN0IGFjcm9zcyBncm91cHMuIAoKYGBge3IgZmFjZWNoZXN0IGJhcnMsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZhY2VjaGVzdF9pbmZvIDwtIGZ1bGxkYXRhICU+JQogIGZpbHRlcihleWVfZXhjbHVkZSA9PSBGQUxTRSkgJT4lCiAgZ3JvdXBfYnkobWFpbmdyb3VwLCBkaXJlY3Rpb24sIHBhcnRpY2lwYW50KSAlPiUKICBzdW1tYXJpc2UoZmFjZWNoZXN0ID0gbWVhbihmYWNlY2hlc3QsIG5hLnJtID0gVFJVRSkpICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCwgZGlyZWN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oZmFjZWNoZXN0KSwKICAgICAgICAgICAgc2QgPSBzZChmYWNlY2hlc3QpLAogICAgICAgICAgICBuID0gbigpLAogICAgICAgICAgICBzZSA9IHNkL3NxcnQobikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUobWFpbmdyb3VwID0gY2FzZV93aGVuKAogICAgbWFpbmdyb3VwID09ICJEZWFmRWFybHkiIH4gIkRlYWYgRWFybHkiLAogICAgbWFpbmdyb3VwID09ICJEZWFmTGF0ZSIgfiAiRGVhZiBMYXRlIiwKICAgIG1haW5ncm91cCA9PSAiSGVhcmluZ0xhdGUiIH4gIkhlYXJpbmcgTGF0ZSIsCiAgICBtYWluZ3JvdXAgPT0gIkhlYXJpbmdOb3ZpY2UiIH4gIkhlYXJpbmcgTm92aWNlIgogICAgKSkKCmdncGxvdChmYWNlY2hlc3RfaW5mbywgYWVzKHggPSBtYWluZ3JvdXAsIHkgPSBtZWFuLCBmaWxsID0gZGlyZWN0aW9uLCBjb2xvciA9IGRpcmVjdGlvbikpICsKICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuNSksIHNpemUgPSAyKSArIAogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWFuLXNlLCB5bWF4ID0gbWVhbitzZSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC41KSwgd2lkdGggPSAwLjMsIHNpemUgPSAxKSArCiAgbGFicyh0aXRsZSA9ICJGYWNlLUNoZXN0IFJhdGlvIiwgeCA9ICIiLCB5ID0gImZhY2UtY2hlc3QgcmF0aW8iKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTEsMSkpICsgCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZG90dGVkIikgKwogIHRoZW1lX2J3KCkKYGBgCgpOb3cgbGV0J3MgZG8gdGhlIEFOT1ZBcy4gQWxzbyBza2lwcGluZyBMU0RzIGhlcmUuIAoKMS4gQU5PVkEgd2l0aCBmYWN0b3JzIE1haW5Hcm91cCAmIERpcmVjdGlvbi4KCmBgYHtyIGZhY2VjaGVzdCBhbm92YSAxLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gJ21hcmt1cCcsIG1lc3NhZ2U9RkFMU0V9CiMgQ3JlYXRlIHRoZSBwYXJ0aWNpcGFudC1sZXZlbCBkYiAobGV0J3MgYWxzbyBwb3AgbW91dGhleWUgaW4gdGhpcyB0b28pCmZjX2RhdGEgPC0gZnVsbGRhdGEgJT4lCiAgZmlsdGVyKGV5ZV9leGNsdWRlID09IEZBTFNFKSAlPiUKICBzZWxlY3QoaWQsIG1haW5ncm91cCwgaGVhcmluZywgYW9hc2wsIGFnZSwgZGlyZWN0aW9uLCBmYWNlY2hlc3QsIG1vdXRoZXllKSAlPiUKICBncm91cF9ieShpZCwgZGlyZWN0aW9uKSAlPiUKICBtdXRhdGUoZmFjZWNoZXN0ID0gbWVhbihmYWNlY2hlc3QsIG5hLnJtID0gVFJVRSksCiAgICAgICAgIG1vdXRoZXllID0gbWVhbihtb3V0aGV5ZSwgbmEucm0gPSBUUlVFKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZmlsdGVyKGlkICE9ICI2IikKCiMgIyBmYWNlY2hlc3QgQU5DT1ZBIDEKIyBmYWNlY2hlc3RfYW92MSA8LSBhb3YoZmFjZWNoZXN0IH4gbWFpbmdyb3VwICogZGlyZWN0aW9uLCBkYXRhID0gZmNfZGF0YSkKIyBzdW1tYXJ5KGZhY2VjaGVzdF9hb3YxKQojICMgZmFjZWNoZXN0X2xzZDEgPC0gTFNELnRlc3QoZmFjZWNoZXN0X2FvdjEsICJtYWluZ3JvdXAiLCBncm91cCA9IEZBTFNFKQojICMgZmFjZWNoZXN0X2xzZDEkY29tcGFyaXNvbgoKZXpBTk9WQSgKICBkYXRhID0gZmNfZGF0YSwKICBkdiA9IGZhY2VjaGVzdCwKICB3aWQgPSBpZCwKICB3aXRoaW4gPSBkaXJlY3Rpb24sCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCmBgYAoKMi4gQU5PVkEgd2l0aCBmYWN0b3IgTWFpbkdyb3VwLCBmb3IgRm9yd2FyZCBvbmx5LgoKYGBge3IgZmFjZWNoZXN0IGFub3ZhMiwgZWNobz1GQUxTRSwgcmVzdWx0cyA9ICdtYXJrdXAnfQojICMgZmFjZWNoZXN0IEFOT1ZBIDIKIyBmYWNlY2hlc3RfYW92MiA8LSBhb3YoZmFjZWNoZXN0IH4gbWFpbmdyb3VwLCBkYXRhID0gZmlsdGVyKGZjX2RhdGEsIGRpcmVjdGlvbiA9PSAiZm9yd2FyZCIpKQojIHN1bW1hcnkoZmFjZWNoZXN0X2FvdjIpCiMgIyBmYWNlY2hlc3RfbHNkMiA8LSBMU0QudGVzdChmYWNlY2hlc3RfYW92MiwgIm1haW5ncm91cCIsIGdyb3VwID0gRkFMU0UpCiMgIyBmYWNlY2hlc3RfbHNkMiRjb21wYXJpc29uCgplekFOT1ZBKAogIGRhdGEgPSBmaWx0ZXIoZmNfZGF0YSwgZGlyZWN0aW9uID09ICJmb3J3YXJkIiksCiAgZHYgPSBmYWNlY2hlc3QsCiAgd2lkID0gaWQsCiAgYmV0d2VlbiA9IG1haW5ncm91cCwKICB0eXBlID0gMwopWyJBTk9WQSJdCmBgYAoKMy4gQU5PVkEgd2l0aCBmYWN0b3IgTWFpbkdyb3VwLCBmb3IgUmV2ZXJzZSBvbmx5LiAKCmBgYHtyIGZhY2VjaGVzdCBhbm92YTMsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30KIyAjIGZhY2VjaGVzdCBBTk9WQSAzCiMgZmFjZWNoZXN0X2FvdjMgPC0gYW92KGZhY2VjaGVzdCB+IG1haW5ncm91cCwgZGF0YSA9IGZpbHRlcihmY19kYXRhLCBkaXJlY3Rpb24gPT0gInJldmVyc2VkIikpCiMgc3VtbWFyeShmYWNlY2hlc3RfYW92MykKIyAjIGZhY2VjaGVzdF9sc2QzIDwtIExTRC50ZXN0KGZhY2VjaGVzdF9hb3YzLCAibWFpbmdyb3VwIiwgZ3JvdXAgPSBGQUxTRSkKIyAjIGZhY2VjaGVzdF9sc2QzJGNvbXBhcmlzb24KZXpBTk9WQSgKICBkYXRhID0gZmlsdGVyKGZjX2RhdGEsIGRpcmVjdGlvbiA9PSAicmV2ZXJzZWQiKSwKICBkdiA9IGZhY2VjaGVzdCwKICB3aWQgPSBpZCwKICBiZXR3ZWVuID0gbWFpbmdyb3VwLAogIHR5cGUgPSAzCilbIkFOT1ZBIl0KYGBgCgojIEV5ZSBHYXplICYgUGVyZm9ybWFuY2UgQ29ycmVsYXRpb25zCgpOZXh0IHdlJ3JlIGdvaW5nIHRvIGNvcnJlbGF0ZSBvdXIgZXllIGdhemUgbWV0cmljcyAoRXllLCBNb3V0aCwgTmVjaywgYW5kIEZhY2VDaGVzdCkgd2l0aCBsZXhpY2FsIHJlY2FsbCBhbmQgZ2lzdC4gT2theSEgQnV0IHJlbWVtYmVyIHdlIGhhdmUgYSBzbGlnaHRseSBzbWFsbGVyIGRhdGFzZXQgaGVyZSBiZWNhdXNlIHdlJ3ZlIGV4Y2x1ZGVkIHNvbWUgcGFydGljaXBhbnRzIGZvciBoYXZpbmcgYmFkIGV5ZSBkYXRhIChidXQgdGhleSBoYWQgdmFsaWQgYmVoYXZpb3JhbCBkYXRhIHNvIHdlIGtlcHQgdGhlbSBpbiB0aGUgQW9BLVBlcmZvcm1hbmNlIGNvcnJlbGF0aW9ucyBhYm92ZSkuIAoKKipJTVBPUlRBTlQ6IFdlIGFsc28gcmVtb3ZlZCBnaXN0X2ZvcndhcmQgY29sdW1uLioqCgpgYGB7ciByZXBhY2thZ2UgZGF0YSBmb3IgY29ycmVsYXRpb25zIGFnYWlufQpleWVwZXJmIDwtIGZ1bGxkYXRhICU+JQogIGZpbHRlcihleWVfZXhjbHVkZSA9PSBGQUxTRSkgJT4lCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBtYWluZ3JvdXAsIGhlYXJpbmcsIGRpcmVjdGlvbiwgYW9hc2wsIHNpZ255cnMsIHNlbGZyYXRlLCBhY2MsIGdpc3QsIGV5ZXMsIG1vdXRoLCBuZWNrLCBmYWNlY2hlc3QpICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCwgcGFydGljaXBhbnQsIGRpcmVjdGlvbikgJT4lCiAgbXV0YXRlKGdpc3QgPSBtZWFuKGdpc3QsIG5hLnJtID0gVFJVRSksCiAgICAgICAgIGxleCA9IG1lYW4oYWNjLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICBleWVzID0gbWVhbihleWVzLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICBtb3V0aCA9IG1lYW4obW91dGgsIG5hLnJtID0gVFJVRSksCiAgICAgICAgIG5lY2sgPSBtZWFuKG5lY2ssIG5hLnJtID0gVFJVRSksCiAgICAgICAgIGZhY2VjaGVzdCA9IG1lYW4oZmFjZWNoZXN0LCBuYS5ybSA9IFRSVUUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KG1haW5ncm91cCwgcGFydGljaXBhbnQsIGhlYXJpbmcsIGRpcmVjdGlvbiwgYW9hc2wsIHNpZ255cnMsIHNlbGZyYXRlLCBnaXN0LCBsZXgsIGV5ZXMsIG1vdXRoLCBuZWNrLCBmYWNlY2hlc3QpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKG1ldHJpYywgdmFsdWUsIGdpc3Q6ZmFjZWNoZXN0KSAlPiUKICB1bml0ZShtZXRyaWN2YWx1ZSwgYyhtZXRyaWMsIGRpcmVjdGlvbiksIHNlcCA9ICJfIikgJT4lCiAgc3ByZWFkKG1ldHJpY3ZhbHVlLCB2YWx1ZSkgJT4lCiAgc2VsZWN0KC1wYXJ0aWNpcGFudCwgLW1haW5ncm91cCkgJT4lCiAgc2VsZWN0KGhlYXJpbmcsIGFvYXNsLCBzaWdueXJzLCBzZWxmcmF0ZSwgZ2lzdF9yZXZlcnNlZCwgbGV4X2ZvcndhcmQsIGxleF9yZXZlcnNlZCwgZXllc19mb3J3YXJkLAogICAgICAgICBleWVzX3JldmVyc2VkLCBtb3V0aF9mb3J3YXJkLCBtb3V0aF9yZXZlcnNlZCwgbmVja19mb3J3YXJkLCBuZWNrX3JldmVyc2VkLCAKICAgICAgICAgZmFjZWNoZXN0X2ZvcndhcmQsIGZhY2VjaGVzdF9yZXZlcnNlZCkKCmV5ZXBlcmZfZGVhZiA8LSBleWVwZXJmICU+JSBmaWx0ZXIoaGVhcmluZyA9PSAiRGVhZiIpICU+JSBzZWxlY3QoLWhlYXJpbmcpCmV5ZXBlcmZfZGVhZl9mdyA8LSBleWVwZXJmX2RlYWYgJT4lIHNlbGVjdChhb2FzbCwgc2lnbnlycywgc2VsZnJhdGUsIGxleF9mb3J3YXJkLCBleWVzX2ZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3V0aF9mb3J3YXJkLCBuZWNrX2ZvcndhcmQsIGZhY2VjaGVzdF9mb3J3YXJkKQpleWVwZXJmX2RlYWZfcnYgPC0gZXllcGVyZl9kZWFmICU+JSBzZWxlY3QoYW9hc2wsIHNpZ255cnMsIHNlbGZyYXRlLCBnaXN0X3JldmVyc2VkLCBsZXhfcmV2ZXJzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleWVzX3JldmVyc2VkLCBtb3V0aF9yZXZlcnNlZCwgbmVja19yZXZlcnNlZCwgZmFjZWNoZXN0X3JldmVyc2VkKQpleWVwZXJmX2hlYXJpbmcgPC0gZXllcGVyZiAlPiUgZmlsdGVyKGhlYXJpbmcgPT0gIkhlYXJpbmciKSAlPiUgc2VsZWN0KC1oZWFyaW5nKQpleWVwZXJmX2hlYXJpbmdfZncgPC0gZXllcGVyZl9oZWFyaW5nICU+JSBzZWxlY3QoYW9hc2wsIHNpZ255cnMsIHNlbGZyYXRlLCBsZXhfZm9yd2FyZCwgZXllc19mb3J3YXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91dGhfZm9yd2FyZCwgbmVja19mb3J3YXJkLCBmYWNlY2hlc3RfZm9yd2FyZCkKZXllcGVyZl9oZWFyaW5nX3J2IDwtIGV5ZXBlcmZfaGVhcmluZyAlPiUgc2VsZWN0KGFvYXNsLCBzaWdueXJzLCBzZWxmcmF0ZSwgZ2lzdF9yZXZlcnNlZCwgbGV4X3JldmVyc2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXllc19yZXZlcnNlZCwgbW91dGhfcmV2ZXJzZWQsIG5lY2tfcmV2ZXJzZWQsIGZhY2VjaGVzdF9yZXZlcnNlZCkKZXllcGVyZl9hbGwgPC0gZXllcGVyZiAlPiUgc2VsZWN0KC1oZWFyaW5nKQpleWVwZXJmX2FsbF9mdyA8LSBleWVwZXJmX2FsbCAlPiUgc2VsZWN0KGFvYXNsLCBzaWdueXJzLCBzZWxmcmF0ZSwgbGV4X2ZvcndhcmQsIGV5ZXNfZm9yd2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXRoX2ZvcndhcmQsIG5lY2tfZm9yd2FyZCwgZmFjZWNoZXN0X2ZvcndhcmQpCmV5ZXBlcmZfYWxsX3J2IDwtIGV5ZXBlcmZfYWxsICU+JSBzZWxlY3QoYW9hc2wsIHNpZ255cnMsIHNlbGZyYXRlLCBnaXN0X3JldmVyc2VkLCBsZXhfcmV2ZXJzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleWVzX3JldmVyc2VkLCBtb3V0aF9yZXZlcnNlZCwgbmVja19yZXZlcnNlZCwgZmFjZWNoZXN0X3JldmVyc2VkKQoKYGBgCiMjIERlYWYgQ29ycmVsYXRpb25zLCBGb3J3YXJkCmBgYHtyIHJvd3MucHJpbnQgPSAxNX0KIyBDb3JyZWxhdGlvbnMgZm9yIERlYWYKcHJpbnQoIkRFQUYgQ29ycmVsYXRpb25zIC0gUGVhcnNvbidzIHIiKQojY29yc3RhcnNsKGxleGdpc3RfZGVhZikKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeChleWVwZXJmX2RlYWZfZncpKSRyCnByaW50KCJERUFGIENvcnJlbGF0aW9ucyAtIFAtdmFsdWVzIikKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeChleWVwZXJmX2RlYWZfZncpKSRQCmNhdChwYXN0ZSgiIiwiXG4iLCIiKSkKY29yc3RhcnNsKGV5ZXBlcmZfZGVhZl9mdykKYGBgCiMjIERlYWYgQ29ycmVsYXRpb25zLCBSZXZlcnNlZApgYGB7ciByb3dzLnByaW50ID0gMTV9CiMgQ29ycmVsYXRpb25zIGZvciBEZWFmCnByaW50KCJERUFGIENvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKI2NvcnN0YXJzbChsZXhnaXN0X2RlYWYpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9kZWFmX3J2KSkkcgpwcmludCgiREVBRiBDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9kZWFmX3J2KSkkUApjYXQocGFzdGUoIiIsIlxuIiwiIikpCmNvcnN0YXJzbChleWVwZXJmX2RlYWZfcnYpCmBgYApgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIyBEZWFmIENvcnJlbGF0aW9ucywgQm90aCBEaXJlY3Rpb25zCiMgQ29ycmVsYXRpb25zIGZvciBEZWFmCnByaW50KCJERUFGIENvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKI2NvcnN0YXJzbChsZXhnaXN0X2RlYWYpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9kZWFmKSkkcgpwcmludCgiREVBRiBDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9kZWFmKSkkUApjYXQocGFzdGUoIiIsIlxuIiwiIikpCmNvcnN0YXJzbChleWVwZXJmX2RlYWYpCmBgYAoKIyMgSGVhcmluZyBDb3JyZWxhdGlvbnMsIEZvcndhcmQKYGBge3Igcm93cy5wcmludCA9IDE1fQojIENvcnJlbGF0aW9ucyBmb3IgSGVhcmluZwpwcmludCgiSEVBUklORyBDb3JyZWxhdGlvbnMgLSBQZWFyc29uJ3MgciIpCiNjb3JzdGFyc2wobGV4Z2lzdF9oZWFyaW5nKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGV5ZXBlcmZfaGVhcmluZ19mdykpJHIKcHJpbnQoIkhFQVJJTkcgQ29ycmVsYXRpb25zIC0gUC12YWx1ZXMiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGV5ZXBlcmZfaGVhcmluZ19mdykpJFAKY2F0KHBhc3RlKCIiLCJcbiIsIiIpKQpjb3JzdGFyc2woZXllcGVyZl9oZWFyaW5nX2Z3KQpgYGAKCiMjIEhlYXJpbmcgQ29ycmVsYXRpb25zLCBSZXZlcnNlZApgYGB7ciByb3dzLnByaW50ID0gMTV9CiMgQ29ycmVsYXRpb25zIGZvciBIZWFyaW5nCnByaW50KCJIRUFSSU5HIENvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKI2NvcnN0YXJzbChsZXhnaXN0X2hlYXJpbmcpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9oZWFyaW5nX3J2KSkkcgpwcmludCgiSEVBUklORyBDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9oZWFyaW5nX3J2KSkkUApjYXQocGFzdGUoIiIsIlxuIiwiIikpCmNvcnN0YXJzbChleWVwZXJmX2hlYXJpbmdfcnYpCmBgYAoKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyMgSGVhcmluZyBDb3JyZWxhdGlvbnMsIEJvdGggRGlyZWN0aW9ucwojIENvcnJlbGF0aW9ucyBmb3IgSGVhcmluZwpwcmludCgiSEVBUklORyBDb3JyZWxhdGlvbnMgLSBQZWFyc29uJ3MgciIpCiNjb3JzdGFyc2wobGV4Z2lzdF9oZWFyaW5nKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGV5ZXBlcmZfaGVhcmluZykpJHIKcHJpbnQoIkhFQVJJTkcgQ29ycmVsYXRpb25zIC0gUC12YWx1ZXMiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGV5ZXBlcmZfaGVhcmluZykpJFAKY2F0KHBhc3RlKCIiLCJcbiIsIiIpKQpjb3JzdGFyc2woZXllcGVyZl9oZWFyaW5nKQpgYGAKCiMjIEFsbCBQZW9wbGUgQ29ycmVsYXRpb25zLCBGb3J3YXJkCmBgYHtyIGNvcnJlbGF0aW9ucyBmb3IgZXllcGVyZmZ3cnYsIHJvd3MucHJpbnQ9MTV9CgpleWVwZXJmX2Z3cnYgPC0gZnVsbGRhdGEgJT4lCiAgZmlsdGVyKGV5ZV9leGNsdWRlID09IEZBTFNFKSAlPiUKICBzZWxlY3QocGFydGljaXBhbnQsIG1haW5ncm91cCwgaGVhcmluZywgZGlyZWN0aW9uLCBhb2FzbCwgc2lnbnlycywgc2VsZnJhdGUsIGFjYywgZ2lzdCwgZXllcywgbW91dGgsIG5lY2ssIGZhY2VjaGVzdCkgJT4lCiAgZ3JvdXBfYnkobWFpbmdyb3VwLCBwYXJ0aWNpcGFudCwgZGlyZWN0aW9uKSAlPiUKICBtdXRhdGUoZ2lzdCA9IG1lYW4oZ2lzdCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgbGV4ID0gbWVhbihhY2MsIG5hLnJtID0gVFJVRSksCiAgICAgICAgIGV5ZXMgPSBtZWFuKGV5ZXMsIG5hLnJtID0gVFJVRSksCiAgICAgICAgIG1vdXRoID0gbWVhbihtb3V0aCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgbmVjayA9IG1lYW4obmVjaywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgZmFjZWNoZXN0ID0gbWVhbihmYWNlY2hlc3QsIG5hLnJtID0gVFJVRSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QobWFpbmdyb3VwLCBwYXJ0aWNpcGFudCwgaGVhcmluZywgZGlyZWN0aW9uLCBhb2FzbCwgc2lnbnlycywgc2VsZnJhdGUsIGdpc3QsIGxleCwgZXllcywgbW91dGgsIG5lY2ssIGZhY2VjaGVzdCkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIobWV0cmljLCB2YWx1ZSwgZ2lzdDpmYWNlY2hlc3QpICU+JQogIHVuaXRlKG1ldHJpY3ZhbHVlLCBjKG1ldHJpYywgZGlyZWN0aW9uKSwgc2VwID0gIl8iLCByZW1vdmUgPSBGQUxTRSkgJT4lCiAgc2VsZWN0KC1tZXRyaWMpICU+JQogIHNwcmVhZChtZXRyaWN2YWx1ZSwgdmFsdWUpICU+JQogIHNlbGVjdCgtcGFydGljaXBhbnQsIC1tYWluZ3JvdXAsIC1oZWFyaW5nKSAlPiUKICBzZWxlY3QoZGlyZWN0aW9uLCBhb2FzbCwgc2lnbnlycywgc2VsZnJhdGUsIGdpc3RfcmV2ZXJzZWQsIGxleF9mb3J3YXJkLCBsZXhfcmV2ZXJzZWQsIGV5ZXNfZm9yd2FyZCwgZXllc19yZXZlcnNlZCwKICAgICAgICAgbW91dGhfZm9yd2FyZCwgbW91dGhfcmV2ZXJzZWQsIG5lY2tfZm9yd2FyZCwgbmVja19yZXZlcnNlZCwgZmFjZWNoZXN0X2ZvcndhcmQsIGZhY2VjaGVzdF9yZXZlcnNlZCkKCmV5ZXBlcmZfZncgPC0gZXllcGVyZl9md3J2ICU+JSBmaWx0ZXIoZGlyZWN0aW9uID09ICJmb3J3YXJkIikgJT4lIAogIHNlbGVjdCgtZGlyZWN0aW9uLCAtZ2lzdF9yZXZlcnNlZCwgLWxleF9yZXZlcnNlZCwgLWV5ZXNfcmV2ZXJzZWQsIC1tb3V0aF9yZXZlcnNlZCwgLW5lY2tfcmV2ZXJzZWQsIC1mYWNlY2hlc3RfcmV2ZXJzZWQpCmV5ZXBlcmZfcnYgPC0gZXllcGVyZl9md3J2ICU+JSBmaWx0ZXIoZGlyZWN0aW9uID09ICJyZXZlcnNlZCIpICU+JSBzZWxlY3QoLWRpcmVjdGlvbiwgLWxleF9mb3J3YXJkLCAtZXllc19mb3J3YXJkLCAtbW91dGhfZm9yd2FyZCwgLW5lY2tfZm9yd2FyZCwgLWZhY2VjaGVzdF9mb3J3YXJkKQoKIyBDb3JyZWxhdGlvbnMgZm9yIEZXCnByaW50KCJGVyBDb3JyZWxhdGlvbnMgLSBQZWFyc29uJ3MgciIpCiNjb3JzdGFyc2wobGV4Z2lzdF9kZWFmKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGV5ZXBlcmZfZncpKSRyCnByaW50KCJGVyBDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9mdykpJFAKY2F0KHBhc3RlKCIiLCJcbiIsIiIpKQpjb3JzdGFyc2woZXllcGVyZl9mdykKYGBgCgojIyBBbGwgUGVvcGxlIENvcnJlbGF0aW9ucywgUmV2ZXJzZWQKYGBge3IgY29ycmVsYXRpb25zIGZvciBleWVwZXJmcnYsIHJvd3MucHJpbnQ9MTV9CiMgQ29ycmVsYXRpb25zIGZvciBSVgpwcmludCgiUlYgQ29ycmVsYXRpb25zIC0gUGVhcnNvbidzIHIiKQojY29yc3RhcnNsKGxleGdpc3RfaGVhcmluZykKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeChleWVwZXJmX3J2KSkkcgpwcmludCgiUlYgQ29ycmVsYXRpb25zIC0gUC12YWx1ZXMiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KGV5ZXBlcmZfcnYpKSRQCmNhdChwYXN0ZSgiIiwiXG4iLCIiKSkKY29yc3RhcnNsKGV5ZXBlcmZfcnYpCmBgYAoKCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMjIEFsbCBQZW9wbGUgQ29ycmVsYXRpb25zLCBCb3RoIERpcmVjdGlvbnMKIyBDb3JyZWxhdGlvbnMgZm9yIEFsbApwcmludCgiQUxMIENvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKI2NvcnN0YXJzbChsZXhnaXN0X2FsbCkKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeChleWVwZXJmX2FsbCkpJHIKcHJpbnQoIkFMTCBDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgoZXllcGVyZl9hbGwpKSRQCmNvcnN0YXJzbChleWVwZXJmX2FsbCkKYGBgCgojIyBDb3JyZWxhdGlvbiBUYWJsZQpBbmQgdGhlIGNvcnJlbGF0aW9uIHRhYmxlLgoKYGBge3IgZXllcGVyZiBjb3JyZWxhdGlvbiBjaGFydHMsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD0xMiwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dwYWlycyhleWVwZXJmLCBjb2x1bW5zID0gYygyOjEzKSwgYWVzKGNvbG9yID0gaGVhcmluZykpCmBgYAoKIyBIZWF0IE1hcHMKQW5kIGZpbmFsbHksIHdlJ3JlIGdvaW5nIHRvIGRvIGhlYXQgbWFwcy4gCmBgYHtyIGhlYXQgbWFwfQpleWVnYXplX2hlYXQgPC0gZnVsbGRhdGEgJT4lCiAgdW5ncm91cCgpICU+JQogIGZpbHRlcihleWVfZXhjbHVkZSA9PSBGQUxTRSkgJT4lCiAgc2VsZWN0KGlkOmRpcmVjdGlvbiwgYmVsbHksIGxvd2VyY2hlc3QsIG1pZGNoZXN0LCB1cHBlcmNoZXN0LCBuZWNrLCBtb3V0aCwgZXllcywgZm9yZWhlYWQpICU+JQogIGdhdGhlcihhb2ksIHBlcmNlbnQsIGJlbGx5OmZvcmVoZWFkKSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIHBhcnRpY2lwYW50LCBkaXJlY3Rpb24sIGFvaSkgJT4lCiAgc3VtbWFyaXNlKHBlcmNlbnQgPSBtZWFuKHBlcmNlbnQsIG5hLnJtPVRSVUUpKSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsZGlyZWN0aW9uLGFvaSkgJT4lCiAgc3VtbWFyaXNlKHBlcmNlbnQgPSBtZWFuKHBlcmNlbnQsIG5hLnJtPVRSVUUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhb2kpKSAlPiUKICBtdXRhdGUoYW9pID0gZmFjdG9yKGFvaSxsZXZlbHM9YygiYmVsbHkiLCJsb3dlcmNoZXN0IiwibWlkY2hlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cHBlcmNoZXN0IiwibmVjayIsIm1vdXRoIiwiZXllcyIsImZvcmVoZWFkIikpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKG1haW5ncm91cCA9IGNhc2Vfd2hlbigKICAgIG1haW5ncm91cCA9PSAiRGVhZkVhcmx5IiB+ICJEZWFmIEVhcmx5IiwKICAgIG1haW5ncm91cCA9PSAiRGVhZkxhdGUiIH4gIkRlYWYgTGF0ZSIsCiAgICBtYWluZ3JvdXAgPT0gIkhlYXJpbmdMYXRlIiB+ICJIZWFyaW5nIExhdGUiLAogICAgbWFpbmdyb3VwID09ICJIZWFyaW5nTm92aWNlIiB+ICJIZWFyaW5nIE5vdmljZSIKICAgICkpICU+JQogIG11dGF0ZShwZXJjZW50X2xhYiA9IGNhc2Vfd2hlbigKICAgIHBlcmNlbnQgPj0gMC4wMSB+IGFzLmNoYXJhY3RlcigKICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHBlcmNlbnQsIDIpICogMTAwLCAnJScpKSwKICAgIHBlcmNlbnQgPCAwLjAxIH4gTkFfY2hhcmFjdGVyXwogICkpCgpleWVnYXplX2hlYXRfYWxsIDwtIGZ1bGxkYXRhICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIoZXllX2V4Y2x1ZGUgPT0gRkFMU0UpICU+JQogIHNlbGVjdChpZDpkaXJlY3Rpb24sIGJlbGx5LCBsb3dlcmNoZXN0LCBtaWRjaGVzdCwgdXBwZXJjaGVzdCwgbmVjaywgbW91dGgsIGV5ZXMsIGZvcmVoZWFkKSAlPiUKICBnYXRoZXIoYW9pLCBwZXJjZW50LCBiZWxseTpmb3JlaGVhZCkgJT4lCiAgZ3JvdXBfYnkobWFpbmdyb3VwLHBhcnRpY2lwYW50LGRpcmVjdGlvbixhb2kpICU+JQogIGRwbHlyOjpzdW1tYXJpemUocGVyY2VudCA9IG1lYW4ocGVyY2VudCwgbmEucm09VFJVRSkpICU+JQogIGdyb3VwX2J5KG1haW5ncm91cCxkaXJlY3Rpb24sYW9pKSAlPiUKICBkcGx5cjo6c3VtbWFyaXplKHBlcmNlbnQgPSBtZWFuKHBlcmNlbnQsIG5hLnJtPVRSVUUpKSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsYW9pKSAlPiUKICBkcGx5cjo6c3VtbWFyaXplKHBlcmNlbnQgPSBtZWFuKHBlcmNlbnQsIG5hLnJtPVRSVUUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhb2kpKSAlPiUKICBtdXRhdGUoYW9pID0gZmFjdG9yKGFvaSxsZXZlbHM9YygiYmVsbHkiLCJsb3dlcmNoZXN0IiwibWlkY2hlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cHBlcmNoZXN0IiwibmVjayIsIm1vdXRoIiwiZXllcyIsImZvcmVoZWFkIikpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKG1haW5ncm91cCA9IGNhc2Vfd2hlbigKICAgIG1haW5ncm91cCA9PSAiRGVhZkVhcmx5IiB+ICJEZWFmIEVhcmx5IiwKICAgIG1haW5ncm91cCA9PSAiRGVhZkxhdGUiIH4gIkRlYWYgTGF0ZSIsCiAgICBtYWluZ3JvdXAgPT0gIkhlYXJpbmdMYXRlIiB+ICJIZWFyaW5nIExhdGUiLAogICAgbWFpbmdyb3VwID09ICJIZWFyaW5nTm92aWNlIiB+ICJIZWFyaW5nIE5vdmljZSIKICAgICkpCgpnZ3Bsb3QoZXllZ2F6ZV9oZWF0LCBhZXMoeCA9IG1haW5ncm91cCwgeSA9IGFvaSkpICsKICBnZW9tX3RpbGUoYWVzKGZpbGw9cGVyY2VudCksY29sb3I9ImxpZ2h0Z3JheSIsbmEucm09VFJVRSkgKyAKIyAgc2NhbGVfZmlsbF92aXJpZGlzKG9wdGlvbiA9ICJ2aXJpZGlzIiwgZGlyZWN0aW9uPS0xLCBsaW1pdHMgPSBjKDAsLjcpLCBsYWJlbHMgPSBwZXJjZW50LCBuYW1lID0gImxvb2tpbmcgdGltZSIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGVyY2VudF9sYWIpLCBzaXplID0gMy41KSArCiAgICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICIjZmZmZmZmIiwgaGlnaCA9ICIjMWM2YWJhIiwgc3BhY2UgPSAiTGFiIiwgbGltaXRzID0gYygwLC43MDQpLCBsYWJlbHMgPSBwZXJjZW50LCBuYW1lID0gImxvb2tpbmcgdGltZSIsIG5hLnZhbHVlID0gImdyZXk1MCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MzAsaGp1c3Q9MSksCiAgICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMSwgY29sb3IgPSAiYmxhY2siLCBmYWNlID0gIml0YWxpYyIpLCAKICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJ3aGl0ZSIsIGZpbGwgPSAid2hpdGUiKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIndoaXRlIikpICsKICBmYWNldF9ncmlkKC4gfiBkaXJlY3Rpb24pICsKICB5bGFiKCIiKSArIHhsYWIoIiIpICsgZ2d0aXRsZSgiRXllIEdhemUgSGVhdCBNYXAsIGJ5IERpcmVjdGlvbiIpICsgZ3VpZGVzKGZpbGwgPSBGKSArCiAgc2NhbGVfeV9kaXNjcmV0ZShleHBhbmQ9YygwLDApKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShleHBhbmQgPSBjKDAsMCkpCgoKZ2dwbG90KGV5ZWdhemVfaGVhdF9hbGwsIGFlcyh4ID0gbWFpbmdyb3VwLCB5ID0gYW9pKSkgKwogIGdlb21fdGlsZShhZXMoZmlsbD1wZXJjZW50KSxjb2xvcj0ibGlnaHRncmF5IixuYS5ybT1UUlVFKSArIAojICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkJsdWVzIiwgZGlyZWN0aW9uPTEsIGxpbWl0cyA9IGMoMCwuNzEpLCBsYWJlbHMgPSBwZXJjZW50LCBuYW1lID0gImxvb2tpbmcgdGltZSIpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICIjZmZmZmZmIiwgaGlnaCA9ICIjMDg1MTljIiwgc3BhY2UgPSAiTGFiIiwgbGltaXRzID0gYygwLC43MSksIGxhYmVscyA9IHBlcmNlbnQsIG5hbWUgPSAibG9va2luZyB0aW1lIiwgbmEudmFsdWUgPSAiZ3JleTUwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0zMCxoanVzdD0xKSwgCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ3aGl0ZSIpKSArCiAgeWxhYigiIikgKyB4bGFiKCIiKSArIGdndGl0bGUoIkV5ZSBHYXplIEhlYXQgTWFwIChEaXJlY3Rpb24gQ29sbGFwc2VkKSIpICsKICBzY2FsZV95X2Rpc2NyZXRlKGV4cGFuZD1jKDAsMCkpICsKICBzY2FsZV94X2Rpc2NyZXRlKGV4cGFuZD1jKDAsMCkpCmBgYAoKIyBTdW1tYXJ5CgpCZWxvdyBhcmUgdGhlIHAtdmFsdWVzIGZyb20gdGhlIEFOT1ZBcyB3aXRoIDQgTWFpbkdyb3Vwcy4gSSBuZXZlciBpbmNsdWRlZCBBZ2UgYXMgYSBjb3ZhcmlhdGUgYmVjYXVzZSBpdCBuZXZlciBpbXByb3ZlZCB0aGUgbW9kZWwuIEkgaW5jbHVkZWQgYWxsIEFOT1ZBcyBmb3IgR2lzdCBhbmQgTGV4IFJlY2FsbCwgYW5kIEFOT1ZBcyBmb3IgYW55IGV5ZSBBT0kgb3IgcmF0aW8gd2FzIGluY2x1ZGVkIG9ubHkgaWYgZWl0aGVyIG1haW5ncm91cCBvciBkaXJlY3Rpb24gd2FzIHNpZ25pZmljYW50LiBEZWFmZWFybHktRGVhZmxhdGUgc2hvd3MgdGhlIExTRCBwLXZhbHVlIGZvciB0aGF0IGNvbXBhcmlzb24uCmBgYHtyIHJlc3VsdHMxLCByb3dzLnByaW50ID0gMjB9CnJlc3VsdHMxIDwtIHN0cnVjdHVyZShsaXN0KG1vZGVsID0gYygiZ2lzdC1tYWluZ3JvdXAtYm90aCIsICJnaXN0LW1haW5ncm91cC1mdyIsIAoiZ2lzdC1tYWluZ3JvdXAtcnYiLCAibGV4cmVjYWxsLW1haW5ncm91cC1ib3RoIiwgImxleHJlY2FsbC1tYWluZ3JvdXAtZnciLCAKImxleHJlY2FsbC1tYWluZ3JvdXAtcnYiLCAibW91dGgtbWFpbmdyb3VwLWJvdGgiLCAidXBwZXJjaGVzdC1tYWluZ3JvdXAtYm90aCIsIAoidXBwZXJjaGVzdC1tYWluZ3JvdXAtcnYiLCAiZmFjZWNoZXN0LW1haW5ncm91cC1ib3RoIiwgIm1vdXRoZXllLW1haW5ncm91cC1ib3RoIgopLCBtYWluZ3JvdXAgPSBjKDAsIDAsIDAuMDEsIDAsIDAuMDQsIDAuMDIsIDAuMDYsIDAsIDAuMDEsIDAuMSwgCjAuMDUpLCBkaXJlY3Rpb24gPSBjKDAsIE5BLCBOQSwgMCwgTkEsIE5BLCAwLjA2LCAwLjE2LCBOQSwgMC4wNywgCjAuNDgpLCBgZGVhZmVhcmx5LWRlYWZsYXRlYCA9IGMoMC4xLCAwLjY5LCAwLjAyLCAwLjExLCAwLjk1LCAKMC4wNiwgMC4zOCwgMC45NCwgMC41MiwgMC4wOCwgMC42OCkpLCAuTmFtZXMgPSBjKCJtb2RlbCIsICJtYWluZ3JvdXAiLCAKImRpcmVjdGlvbiIsICJkZWFmZWFybHktZGVhZmxhdGUiKSwgY2xhc3MgPSBjKCJ0YmxfZGYiLCAidGJsIiwgCiJkYXRhLmZyYW1lIiksIHJvdy5uYW1lcyA9IGMoTkEsIC0xMUwpKQoKcmVzdWx0czEKYGBgCgpBbmQgYmVsb3cgYXJlIHRoZSBwLXZhbHVlcyBmcm9tIHRoZSBBTkNPVkFzIHdpdGggSGVhcmluZyAmIEFvQVNMLiBJIGluY2x1ZGVkIGFsbCBBTkNPVkFzIGZvciBHaXN0IGFuZCBMZXggUmVjYWxsLCBhbmQgQU5DT1ZBcyBmb3IgYW55IGV5ZSBBT0kgb3IgcmF0aW8gd2FzIGluY2x1ZGVkIG9ubHkgaWYgYW55IG1haW4gZmFjdG9yIHdhcyBzaWduaWZpY2FudC4gTFNEIGNvbXBhcmlzb25zIGFyZSBub3QgbmVlZGVkIGJlY2F1c2UgdGhlcmUncyBvbmx5IDIgbGV2ZWxzIGluIGVhY2ggZ3JvdXAhCgpgYGB7ciByZXN1bHRzMiwgcm93cy5wcmludCA9IDI1fQpyZXN1bHRzMiA8LSBzdHJ1Y3R1cmUobGlzdChtb2RlbCA9IGMoImdpc3QtYm90aCIsICJnaXN0LWZ3IiwgImdpc3QtcnYiLCAibGV4LWJvdGgiLCAKImxleC1mdyIsICJsZXgtcnYiLCAiZm9yZWhlYWQtZnciLCAibW91dGgtYm90aCIsICJtb3V0aC1ydiIsIAoidXBwZXJjaGVzdC1ib3RoIiwgInVwcGVyY2hlc3QtcnYiLCAiZmFjZWNoZXN0LWJvdGgiLCAibW91dGhleWUtYm90aCIKKSwgaGVhcmluZyA9IGMoMCwgMC4wMCwgMC4wMSwgMC4wMSwgMC4yMiwgMC4wMywgMC4wNiwgMC4wMSwgCjAuMDQsIDAuMDEsIDAuMDEsIDAuMzUsIDAuMDcpLCBkaXJlY3Rpb24gPSBjKDAsIE5BLCBOQSwgMCwgTkEsIApOQSwgTkEsIDAuMDUsIE5BLCAwLjIxLCBOQSwgMC4wNSwgMC41MiksIGFvYXNsID0gYygwLjIyLCAwLjc3LCAKMC4xOSwgMC41NiwgMC41OCwgMC4yNSwgMC4wOCwgMC4wNiwgMC4xMiwgMC42OCwgMC45NSwgMC4xMiwgMC40NAopLCBhZ2UgPSBjKDAuMDgsIDAuMDEsIDAuODYsIDAuMDksIDAuMDIsIDAuNywgMC42OCwgMC4yOCwgMC41LCAKMC4wMiwgMC4wOCwgMC4wMCwgMC4yMSkpLCAuTmFtZXMgPSBjKCJtb2RlbCIsICJoZWFyaW5nIiwgImRpcmVjdGlvbiIsIAoiYW9hc2wiLCAiYWdlIiksIGNsYXNzID0gYygidGJsX2RmIiwgInRibCIsICJkYXRhLmZyYW1lIiksIHJvdy5uYW1lcyA9IGMoTkEsIAotMTNMKSkKcmVzdWx0czIKYGBgCgpGaW5hbGx5LCB0aGUgY29ycmVsYXRpb25zIGZvciBEZWFmIGFuZCBIZWFyaW5nIHNlcGFyYXRlbHkgYXJlIG5vdCBzaWduaWZpY2FudC4gQnV0IHRoZXJlIGFyZSBzaWduaWZpY2FudCBjb3JyZWxhdGlvbnMgYWNyb3NzIGFsbCBwYXJ0aWNpcGFudHMuIEkgd29ycnkgaXQgaXMgY2F1c2VkIGJ5IEhlYXJpbmdOb3ZpY2UsIHRob3VnaC4uLgoKYGBge3IgY29ycmVsYXRpb24gdGFibGV9CnJlc3VsdHMzIDwtIHRyaWJibGUoCiAgfiBtZXRyaWMsIH4gQW9BU0xjb3JyZWxhdGlvblJ2YWx1ZSwgfiBQdmFsdWUsCiAgImdpc3QtZnciLCAtMC4zMiwgMC4wMTksCiAgImdpc3QtcnYiLCAtMC4zOSwgMC4wMDQsCiAgImxleC1mdyIsIC0wLjA4LCAwLjU2NywKICAibGV4LXJ2IiwgLTAuMzQsIDAuMDE0CikKcmVzdWx0czMKYGBgCgojIFRlcm5hcnkgUGxvdHMKCkxldCdzIG1ha2UgdHJpYW5nbGUgcGxvdHMuICJXaGF0PyIgeW91IHNheS4gUmVhZCBvbi4gCgpgYGB7ciBmaWcuaGVpZ2h0PTEyLCBmaWcud2lkdGg9MTIsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkoZ2d0ZXJuKQpmdWxsZGF0YSAlPiUgCiAgZ2d0ZXJuKGFlcyh4ID0gZXllcywgeSA9IG1vdXRoLCB6ID0gbmVjaykpICsgZmFjZXRfZ3JpZChkaXJlY3Rpb24gfiBtYWluZ3JvdXApICsgc3RhdF9kZW5zaXR5X3Rlcm4oZ2VvbT0ncG9seWdvbicsIGFlcyhmaWxsPS4ubGV2ZWwuLiksIGJpbnM9NCkgKyBnZW9tX3BvaW50KGNvbG9yID0gIndoaXRlIiwgYWxwaGEgPSAwLjUpICsgdGhlbWVfYncoKQoKZnVsbGRhdGEgJT4lIAogIGdndGVybihhZXMoeCA9IGV5ZXMsIHkgPSBtb3V0aCwgeiA9IG5lY2spKSArIGZhY2V0X2dyaWQoZGlyZWN0aW9uIH4gbWFpbmdyb3VwKSArIGdlb21fY29uZmlkZW5jZV90ZXJuKGJyZWFrcyA9IGMoLjUpLCBjb2xvciA9ICJyZWQiKSArIGdlb21fcG9pbnQoKSArIHRoZW1lX2J3KCkKYGBgCgojIFJhaW4ncyBOb3RlcwpBYm91dCBBZHVsdHM6CgotSSB0aGluayBJIHdhbnQgdG8gd3JpdGUgaXQgdXAgYXMgYW4gQU5DT1ZBLCB3aXRoIGRpcmVjdGlvbiBpbmNsdWRlZC4gIEFuZCBMU0QgY29tcGFyaXNvbnMgaW5zdGVhZCBvZiBUdWtleS4gIChJIHdpbGwgZG8gbXkgb3duIGNvcnJlY3Rpb25zKQotWW91IG9mdGVuIGhhdmUgb25lIGxpbmVycyBzdW1tYXJpemluZyByZXN1bHRzLCBpbiBhbGwgdGFicywgdGhvc2UgYXJlIG5pY2UsIGtlZXAgdGhlbSBjb21pbmcuCi0oSWYgeW91IGhhdmUgcmVhc29ucyB0byBwcmVzZW50IGFueXRoaW5nIG90aGVyIHRoYW4gdGhlIEFOQ09WQSwgcHV0IHRoYXQgaW4geW91ciByZXN1bHRzIHRhYikKIApJIHRoaW5rIGlmIHdlIGRvIGl0IHRoaXMgd2F5IHRoZW4gd2UgZ2V0IGEgcmVhbGx5IGltcG9ydGFudCBzdG9yeSB0byB0ZWxsOiAgVGhhdCB0aGUgKmNyaXRpY2FsKiBBb0EgY3V0b2ZmIGlzIGJlbG93IDQgdnMgYWJvdmUgNCB5ZWFycyBvZiBhZ2UgKHR3byBncm91cHMgMC00IHZzIDQtMTMpLiAgVGhpcyBzdWdnZXN0IGVhcmx5IEFTTCBpcyBpbXBvcnRhbnQuICAKCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgR2lzdCBhcyBiaW5vbWlhbCBsb2dpdC1saW5rIGZ1bmN0aW9uIG1vZGVsCmdpc3RfZ2xtbSA8LSBnbG1lcihnaXN0IH4gZGlyZWN0aW9uICogbWFpbmdyb3VwICsgKDF8aWQpICsgKDF8c3RvcnkpLCBkYXRhID0gZnVsbGRhdGEsIGZhbWlseT1iaW5vbWlhbCAobGluaz0ibG9naXQiKSkKc3VtbWFyeShnaXN0X2dsbW0pCmBgYAoKIyBWaWV3aW5nIFNwYWNlIENvcnJlbGF0aW9ucyAKCk9rYXkgbm93IGxldCdzIHdvcmsgd2l0aCB0aGUgcmF3IHZpZXdpbmcgc3BhY2UgdGhhdCB3ZSBjcmVhdGVkIGluIFswNXZpZXdpbmdzcGFjZV0oMDV2aWV3aW5nc3BhY2UubmIuaHRtbCkuIEZvciBlYWNoIHBhcnRpY2lwYW50IHRoZSBmaXJzdCAzMCBzYW1wbGVzIHdhcyByZW1vdmVkLiAKCisgYm94IHdpZHRoCisgdXBwZXIgbGltaXQKKyBsb3dlciBsaW1pdAorIGxlZnQgc2lkZQorIHJpZ2h0IHNpZGUKKyBoZWlnaHQKKyBib3ggY2VudGVyIHBvc2l0aW9uCisgYXJlYQoKY29ycmVsYXRlZCB3aXRoIAoKKyBnaXN0CisgbGV4aWNhbCByZWNhbGwKKyBzaWduIHllYXJzCisgYW9hc2wKCkhlcmUncyBzYW1wbGUgb2YgdGhlIHJhdyB2aWV3aW5nIGRhdGEgc3RydWN0dXJlLiBJJ20gYWxzbyBnb2luZyB0byBmaXggcGFydGljaXBhbnQgbmFtZXMgYmVjYXVzZSB0aGUgcmF3IHZpZXdpbmcgZGF0YSBoYXMgdGhlIG9sZCBwYXJ0aWNpcGFudCBuYW1lcy4gCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp2aWV3aW5nIDwtIHJlYWRfY3N2KCcuLi9BZHVsdCBEYXRhL3Jhd2RhdGEvYWR1bHR2aWV3aW5nc3BhY2VyYXcuY3N2JywgcHJvZ3Jlc3M9RkFMU0UpIAoKIyBGaXggcGFydGljaXBhbnQgbmFtZXMKcGFydG5hbWVzIDwtIHJlYWRfY3N2KCJwYXJ0bmFtZXMuY3N2IikgJT4lIAogIGRpc3RpbmN0KCkgJT4lIAogIG11dGF0ZShwYXJ0aWNpcGFudCA9IGFzLmNoYXJhY3RlcihwYXJ0aWNpcGFudCksCiAgICAgICAgIG5ld19wYXJ0aWNpcGFudCA9IGFzLmNoYXJhY3RlcihuZXdfcGFydGljaXBhbnQpKQp2aWV3aW5nIDwtIGxlZnRfam9pbih2aWV3aW5nLCBwYXJ0bmFtZXMsIGJ5ID0gInBhcnRpY2lwYW50IikgJT4lCiAgc2VsZWN0KC1wYXJ0aWNpcGFudCkgJT4lCiAgcmVuYW1lKHBhcnRpY2lwYW50ID0gbmV3X3BhcnRpY2lwYW50KSAlPiUKICBmaWx0ZXIoIWlzLm5hKHBhcnRpY2lwYW50KSkgJT4lCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBncm91cDptYWluZ3JvdXApCgojIFNob3cgdGFibGUKaGVhZCh2aWV3aW5nLCAxMCkKYGBgCgpOb3cgSSdtIGdvaW5nIHRvIGNvbXB1dGUgdGhlIGZvbGxvd2luZyBtZXRyaWNzIHdpdGggdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyEKCisgKnVwcGVyKiAoNzV0aCBwZXJjZW50aWxlIG9uIHktYXhpcykKKyAqbG93ZXIqICgyNXRoIHBlcmNlbnRpbGUgb24geS1heGlzKQorICpsZWZ0KiAoMjV0aCBwZXJjZW50aWxlIG9uIHgtYXhpcykKKyAqcmlnaHQqICg3NXRoIHBlcmNlbnRpbGUgb24geC1heGlzKQorICp3aWR0aCogKHgtYXhpcyBJUVIpCisgKmhlaWdodCogKHktYXhpcyBJUVIpCisgKngtY2VudGVyKiAobWVkaWFuIHgtYXhpcykKKyAqeS1jZW50ZXIqIChtZWRpYW4geS1heGlzKQorICphcmVhKiAoeC1heGlzIElRUiAqIHktYXhpcyBJUVIpCgpgYGB7cn0KIyBjb21wdXRlIHZpZXdpbmcgbWV0cmljcwp2aWV3aW5nX21ldHJpY3MgPC0gdmlld2luZyAlPiUKICBncm91cF9ieShwYXJ0aWNpcGFudCwgZGlyZWN0aW9uLCBtZWRpYSkgJT4lCiAgc3VtbWFyaXNlKAogICAgdXBwZXIgPSBxdWFudGlsZSh5LG5hLnJtPVRSVUUpW1syXV0sCiAgICBsb3dlciA9IHF1YW50aWxlKHksbmEucm09VFJVRSlbWzRdXSwKICAgIGxlZnQgPSBxdWFudGlsZSh4LG5hLnJtPVRSVUUpW1syXV0sCiAgICByaWdodCA9IHF1YW50aWxlKHgsbmEucm09VFJVRSlbWzRdXSwKICAgIHdpZHRoID0gSVFSKHgsbmEucm09VFJVRSksCiAgICBoZWlnaHQgPSBJUVIoeSxuYS5ybT1UUlVFKSwKICAgIHhfY2VudGVyID0gbWVkaWFuKHgsbmEucm09VFJVRSksCiAgICB5X2NlbnRlciA9IG1lZGlhbih5LG5hLnJtPVRSVUUpLAogICAgYXJlYSA9IHdpZHRoKmhlaWdodAogICAgKQoKIyBhdmVyYWdlIGFjcm9zcyB0d28gc3RvcmllcyBmb3IgZWFjaCBkaXJlY3Rpb24Kdmlld2luZ19tZXRyaWNzIDwtIHZpZXdpbmdfbWV0cmljcyAlPiUKICBncm91cF9ieShwYXJ0aWNpcGFudCwgZGlyZWN0aW9uKSAlPiUKICBzdW1tYXJpc2VfaWYoaXMubnVtZXJpYywgZnVucyhtZWFuKC4sIG5hLnJtID0gVFJVRSkpKQoKaGVhZCh2aWV3aW5nX21ldHJpY3MsMTApCmBgYAoKTm93IEknbGwgam9pbiB0aGUgYmVoYXZpb3JhbCBkYXRhIHdpdGggdGhlIHZpZXdpbmcgc3BhY2UgbWV0cmljcy4gQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiB0aGUgZm9yd2FyZCB0YWJsZSBmb3Igdmlld2luZyBzcGFjZSBhbmQgYmVoYXZpb3JhbCBkYXRhCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIEdldCBiZWhhdmlvcmFsIG1lYXN1cmVzCmV5ZXBlcmZfZndydiA8LSBmdWxsZGF0YSAlPiUKICBmaWx0ZXIoZXllX2V4Y2x1ZGUgPT0gRkFMU0UpICU+JQogIHNlbGVjdChwYXJ0aWNpcGFudCwgbWFpbmdyb3VwLCBoZWFyaW5nLCBkaXJlY3Rpb24sIGFvYXNsLCBzaWdueXJzLCBzZWxmcmF0ZSwgYWNjLCBnaXN0LCBleWVzLCBtb3V0aCwgbmVjaywgZmFjZWNoZXN0KSAlPiUKICBncm91cF9ieShtYWluZ3JvdXAsIHBhcnRpY2lwYW50LCBkaXJlY3Rpb24pICU+JQogIG11dGF0ZShnaXN0ID0gbWVhbihnaXN0LCBuYS5ybSA9IFRSVUUpLAogICAgICAgICBsZXggPSBtZWFuKGFjYywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgZXllcyA9IG1lYW4oZXllcywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgbW91dGggPSBtZWFuKG1vdXRoLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICBuZWNrID0gbWVhbihuZWNrLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICBmYWNlY2hlc3QgPSBtZWFuKGZhY2VjaGVzdCwgbmEucm0gPSBUUlVFKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdChtYWluZ3JvdXAsIHBhcnRpY2lwYW50LCBoZWFyaW5nLCBkaXJlY3Rpb24sIGFvYXNsLCBzaWdueXJzLCBzZWxmcmF0ZSwgZ2lzdCwgbGV4KSAlPiUKICBkaXN0aW5jdCgpCgp2aWV3aW5nX21ldHJpY3NfYmVoYXYgPC0gCiAgbGVmdF9qb2luKHZpZXdpbmdfbWV0cmljcywgZXllcGVyZl9md3J2LCBieSA9IGMoInBhcnRpY2lwYW50IiwiZGlyZWN0aW9uIikpICU+JQogIGZpbHRlcighaXMubmEobWFpbmdyb3VwKSkgJT4lCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBkaXJlY3Rpb24sIGhlYXJpbmcsIG1haW5ncm91cDpsZXgsIHVwcGVyOmFyZWEpICU+JQogIGdhdGhlcihtZXRyaWMsIHZhbHVlLCBnaXN0OmFyZWEpICU+JQogIHVuaXRlKG1ldHJpY3ZhbHVlLCBjKG1ldHJpYywgZGlyZWN0aW9uKSwgc2VwID0gIl8iLCByZW1vdmUgPSBGQUxTRSkgJT4lCiAgc2VsZWN0KC1tZXRyaWMpICU+JQogIHNwcmVhZChtZXRyaWN2YWx1ZSwgdmFsdWUpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLXBhcnRpY2lwYW50LCAtbWFpbmdyb3VwKQoKdmlld2luZ19mdyA8LSB2aWV3aW5nX21ldHJpY3NfYmVoYXYgJT4lIAogIGZpbHRlcihkaXJlY3Rpb24gPT0gImZvcndhcmQiKSAlPiUgCiAgc2VsZWN0KGhlYXJpbmcsCiAgICAgICAgIGFvYXNsLAogICAgICAgICBzaWdueXJzLAogICAgICAgICBzZWxmcmF0ZSwKICAgICAgICAgZ2lzdF9mb3J3YXJkLCAKICAgICAgICAgbGV4X2ZvcndhcmQsIAogICAgICAgICB1cHBlcl9mb3J3YXJkLCAKICAgICAgICAgbG93ZXJfZm9yd2FyZCwgCiAgICAgICAgIGxlZnRfZm9yd2FyZCwgCiAgICAgICAgIHJpZ2h0X2ZvcndhcmQsIAogICAgICAgICB3aWR0aF9mb3J3YXJkLCAKICAgICAgICAgaGVpZ2h0X2ZvcndhcmQsIAogICAgICAgICB4X2NlbnRlcl9mb3J3YXJkLCAKICAgICAgICAgeV9jZW50ZXJfZm9yd2FyZCwKICAgICAgICAgYXJlYV9mb3J3YXJkKQp2aWV3aW5nX2Z3X2RlYWYgPC0gdmlld2luZ19mdyAlPiUKICBmaWx0ZXIoaGVhcmluZyA9PSAiRGVhZiIpICU+JQogIHNlbGVjdCgtaGVhcmluZykKdmlld2luZ19md19oZWFyaW5nIDwtIHZpZXdpbmdfZncgJT4lCiAgZmlsdGVyKGhlYXJpbmcgPT0gIkhlYXJpbmciKSAlPiUKICBzZWxlY3QoLWhlYXJpbmcpCnZpZXdpbmdfcnYgPC0gdmlld2luZ19tZXRyaWNzX2JlaGF2ICU+JSAKICBmaWx0ZXIoZGlyZWN0aW9uID09ICJyZXZlcnNlZCIpICU+JSAKICBzZWxlY3QoaGVhcmluZywKICAgICAgICAgYW9hc2wsCiAgICAgICAgIHNpZ255cnMsCiAgICAgICAgIHNlbGZyYXRlLAogICAgICAgICBnaXN0X3JldmVyc2VkLCAKICAgICAgICAgbGV4X3JldmVyc2VkLCAKICAgICAgICAgdXBwZXJfcmV2ZXJzZWQsIAogICAgICAgICBsb3dlcl9yZXZlcnNlZCwgCiAgICAgICAgIGxlZnRfcmV2ZXJzZWQsIAogICAgICAgICByaWdodF9yZXZlcnNlZCwgCiAgICAgICAgIHdpZHRoX3JldmVyc2VkLCAKICAgICAgICAgaGVpZ2h0X3JldmVyc2VkLCAKICAgICAgICAgeF9jZW50ZXJfcmV2ZXJzZWQsIAogICAgICAgICB5X2NlbnRlcl9yZXZlcnNlZCwKICAgICAgICAgYXJlYV9yZXZlcnNlZCkKdmlld2luZ19ydl9kZWFmIDwtIHZpZXdpbmdfcnYgJT4lCiAgZmlsdGVyKGhlYXJpbmcgPT0gIkRlYWYiKSAlPiUKICBzZWxlY3QoLWhlYXJpbmcpCnZpZXdpbmdfcnZfaGVhcmluZyA8LSB2aWV3aW5nX3J2ICU+JQogIGZpbHRlcihoZWFyaW5nID09ICJIZWFyaW5nIikgJT4lCiAgc2VsZWN0KC1oZWFyaW5nKQoKdmlld2luZ19mdyA8LSBzZWxlY3Qodmlld2luZ19mdywgLWhlYXJpbmcpCnZpZXdpbmdfcnYgPC0gc2VsZWN0KHZpZXdpbmdfcnYsIC1oZWFyaW5nKQoKaGVhZCh2aWV3aW5nX2Z3LDEwKQpgYGAKCiMjIERlYWYgVmlld2luZyBDb3JyZWxhdGlvbnMsIEZvcndhcmQKYGBge3Igcm93cy5wcmludCA9IDE1fQpwcmludCgiQ29ycmVsYXRpb25zIC0gUGVhcnNvbidzIHIiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KHZpZXdpbmdfZndfZGVhZikpJHIKcHJpbnQoIkNvcnJlbGF0aW9ucyAtIFAtdmFsdWVzIikKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeCh2aWV3aW5nX2Z3X2RlYWYpKSRQCmNvcnN0YXJzbCh2aWV3aW5nX2Z3X2RlYWYpCmBgYAojIyBEZWFmIFZpZXdpbmcgQ29ycmVsYXRpb25zLCBSZXZlcnNlZApgYGB7ciByb3dzLnByaW50ID0gMTV9CnByaW50KCJDb3JyZWxhdGlvbnMgLSBQZWFyc29uJ3MgciIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgodmlld2luZ19ydl9kZWFmKSkkcgpwcmludCgiQ29ycmVsYXRpb25zIC0gUC12YWx1ZXMiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KHZpZXdpbmdfcnZfZGVhZikpJFAKY29yc3RhcnNsKHZpZXdpbmdfcnZfZGVhZikKYGBgCgojIyBIZWFyaW5nIFZpZXdpbmcgQ29ycmVsYXRpb25zLCBGb3J3YXJkCmBgYHtyIHJvd3MucHJpbnQgPSAxNX0KcHJpbnQoIkNvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeCh2aWV3aW5nX2Z3X2hlYXJpbmcpKSRyCnByaW50KCJDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgodmlld2luZ19md19oZWFyaW5nKSkkUApjb3JzdGFyc2wodmlld2luZ19md19oZWFyaW5nKQpgYGAKIyMgSGVhcmluZyBWaWV3aW5nIENvcnJlbGF0aW9ucywgUmV2ZXJzZWQKYGBge3Igcm93cy5wcmludCA9IDE1fQpwcmludCgiQ29ycmVsYXRpb25zIC0gUGVhcnNvbidzIHIiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KHZpZXdpbmdfcnZfaGVhcmluZykpJHIKcHJpbnQoIkNvcnJlbGF0aW9ucyAtIFAtdmFsdWVzIikKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeCh2aWV3aW5nX3J2X2hlYXJpbmcpKSRQCmNvcnN0YXJzbCh2aWV3aW5nX3J2X2hlYXJpbmcpCmBgYAojIyBBbGwgVmlld2luZyBDb3JyZWxhdGlvbnMsIEZvcndhcmQKYGBge3Igcm93cy5wcmludCA9IDE1fQpwcmludCgiQ29ycmVsYXRpb25zIC0gUGVhcnNvbidzIHIiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KHZpZXdpbmdfZncpKSRyCnByaW50KCJDb3JyZWxhdGlvbnMgLSBQLXZhbHVlcyIpCkhtaXNjOjpyY29ycihhcy5tYXRyaXgodmlld2luZ19mdykpJFAKY29yc3RhcnNsKHZpZXdpbmdfZncpCmBgYAojIyBBbGwgVmlld2luZyBDb3JyZWxhdGlvbnMsIFJldmVyc2VkCmBgYHtyIHJvd3MucHJpbnQgPSAxNX0KcHJpbnQoIkNvcnJlbGF0aW9ucyAtIFBlYXJzb24ncyByIikKSG1pc2M6OnJjb3JyKGFzLm1hdHJpeCh2aWV3aW5nX3J2KSkkcgpwcmludCgiQ29ycmVsYXRpb25zIC0gUC12YWx1ZXMiKQpIbWlzYzo6cmNvcnIoYXMubWF0cml4KHZpZXdpbmdfcnYpKSRQCmNvcnN0YXJzbCh2aWV3aW5nX3J2KQpgYGAKCg==